繁体   English   中英

通过值对python中的字典进行排序,但保持相等值的键顺序

[英]Sort a dictionary in python by values but maintaining the key order for equal values

可以说有一本字典

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?

做这个:

od = collections.OrderedDict(sorted(d.items(), key = lambda x:(-x[1],x[0])))

正如@Padraic所说,“你不能从最高到最低,从最低到最高。” 因此,您必须通过使排序函数看到最高数字作为最低数字来欺骗它。 它按键的自然顺序进行子排序。

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)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM