【发布时间】:2020-12-10 13:11:52
【问题描述】:
我正在尝试对字典进行排序,我要遵循的顺序是首先,字典应该按值按升序排序,如果两个或多个键的值相等,那么我想对字典进行排序按降序排列。
代码如下:
dictionary = {0: 150, 1: 151, 2: 150, 3: 101, 4: 107}
print(sorted(dictionary.items(), key=lambda x: (x[1], x[0])))
我希望输出如下:
[(3, 101), (4, 107), (2, 150), (0, 150), (1, 151)]
但是输出是:
[(3, 101), (4, 107), (0, 150), (2, 150), (1, 151)]
【问题讨论】:
-
鉴于值是数字,您可以使用
sorted(dictionary.items(), key=lambda x: (-x[1], x[0])) -
如果您希望两个值同时按相反方向排序,您必须将其中一个设为负。
-
@jonrsharpe 如果两者都不是数字,有什么通用建议吗? (我之前能想到的只是按照
cmp1 or cmp2的行编写一个组合的cmp函数并使用cmp_to_key。) -
我在上面写的与所要求的相反(尽管一般原则成立)-在下面的回答中更正。
-
这里,您使用的是 sorted(),它以升序为默认值
标签: python dictionary data-structures