让我们说有一本字典
d = {"P1":77,"P2":89,"P3":77}
我想以下列形式打印结果
P2:89
P1:77
P3:77
即。按字典值排序,对于相等的值,首先出现一个(即P1出现在P3之前)
我做了以下
import collections
od = collections.OrderedDict(sorted(d.items(), key=lambda x:x[1], reverse=True))
od给出
OrderedDict([('P2', 89), ('P3', 77), ('P1', 77)])
如何在P3之前获得P1?
答案 0 :(得分:2)
这样做:
od = collections.OrderedDict(sorted(d.items(), key = lambda x:(-x[1],x[0])))
正如@Padraic所说,“你不能从最高到最低,从最低到最高。”因此,您必须欺骗排序函数,方法是将最高数字视为最低数字。它按键的自然顺序进行子排序。
答案 1 :(得分:2)
Python的sort
是稳定的排序,这意味着如果项目比较相等,则项目将保持其原始顺序。如果您从OrderedDict
开始并仅对值进行排序,则它们将保持原始顺序。但是,在您的情况下,使用直接排序从最高到最低的键排序它们,而不是反转排序,以使它们保持相同的键顺序。
from collections import OrderedDict
d = OrderedDict([('P1',77),('P2',89),('P3',77)])
print sorted(d.items(),key=lambda x:-x[1])
d = OrderedDict([('P3',77),('P2',89),('P1',77)])
print sorted(d.items(),key=lambda x:-x[1])
[('P2', 89), ('P1', 77), ('P3', 77)]
[('P2', 89), ('P3', 77), ('P1', 77)]