按值升序排序字典,按键降序排序

我正在尝试对字典进行排序,我要遵循的顺序是,首先,字典应该按值按升序排序,如果两个或多个键的值相等,那么我想按键对字典进行排序按降序排列。

这是代码:

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


陪伴而非守候
浏览 92回答 1
1回答

守候你守候我

因为这里的值是数字的,所以你可以使用否定作为与反转排序顺序相同的效果:sorted(dictionary.items(), key=lambda x: (x[1], -x[0]))对于不能依赖数字值的更通用的情况,这里是一种可能的方法,尽管可能有更好的方法。from functools import cmp_to_keydef cmp(a, b):&nbsp; &nbsp; # https://stackoverflow.com/a/22490617/13596037&nbsp; &nbsp; return (a > b) - (a < b)def cmp_items(a, b):&nbsp; &nbsp; """&nbsp; &nbsp; compare by second item forward, or if they are the same then use first item&nbsp; &nbsp; in reverse direction (returns -1/0/1)&nbsp; &nbsp; """&nbsp; &nbsp; return cmp(a[1], b[1]) or cmp(b[0], a[0])dictionary = {0: 150, 1: 151, 2: 150, 3: 101, 4: 107}print(sorted(dictionary.items(), key=cmp_to_key(cmp_items)))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python