我需要用两个顺序标准对这个字典进行排序:"排名"下降,"水果"上升(在相同排名结果的情况下).
这个词是以这种方式构成的
'object':['fruit',rank]
Run Code Online (Sandbox Code Playgroud)
例如,我:
myDict = {'item2': ['bananas', 3], 'item3': ['cocumbers', 11], 'item1': ['pinapples', 3], 'item4': ['pears', 3]}
Run Code Online (Sandbox Code Playgroud)
我的目标是获得这个:
{'item3': ['cocumbers', 11], 'item2': ['bananas', 3],'item4': ['pears', 3], 'item1': ['pinapples', 3]}
Run Code Online (Sandbox Code Playgroud)
同
sorted(myDict.items(), key=lambda (k, v): v[1], reverse=True)
Run Code Online (Sandbox Code Playgroud)
我只获得了排名的正确排序,但对于具有相同排名的对象没有排序顺序:
[('item3', ['cocumbers', 11]), ('item2', ['bananas', 3]), ('item1', ['pinapples', 3]), ('item4', ['pears', 3])]
Run Code Online (Sandbox Code Playgroud)
如何在python 2.7中解决这个问题?
谢谢
sorted(myDict.items(), key=lambda (k, v): (-v[1],v[0]))
应该做的伎俩.由于rank是一个整数,我们可以通过使键函数返回负值而不是需要reverse=True关键字来轻松地使其降序排序sorted.在平局的情况下,我们会依赖于字符串的自然顺序.
这是因为python排序tuples中的序列按字典顺序排列(是序列类型) - Python按顺序比较每个序列中的元素,直到其中一个元素不相等,从而给出了序列对的排序.
如果您无法轻松替换reverse=True键功能,则需要进行两次排序:
l1 = sorted(myDict.items(),key=lambda (k,v):v[0])
l1.sort(key=lambda (k,v):v[1],reverse=True)
Run Code Online (Sandbox Code Playgroud)
这依赖于记录的事实,即python排序必须是稳定的.换句话说,相等的元素的相对顺序在排序之前和之后是相同的.