我有一本字典
r = {1: 4, 2: 4, 4: 4, 5: 4, 6: 10}
我想根据值(降序)对其进行排序,如果有冲突,则按键(升序)排序。
即输出应该是
[6 ,1 ,2 ,4 ,5]
我该怎么做?
如果我有单子而不是字典,上面的问题会简单吗?即
r = [(1, 4), (2, 4), (4, 4), (5, 4), (6, 10)]
最佳答案
使用key
参数sorted()
为每个元素生成元组:
sorted(r, key=lambda k: (r[k], -k), reverse=True)
或
sorted(r, key=lambda k: (-r[k], k))
现在,键将根据
(value, negative key)
元组进行排序(反向),或根据(negative value, key)
元组进行排序(正向)。元组是按字典排序的,所以通过对键进行排序来打破相等值之间的联系。通过对值或键求反,可以影响反向排序。演示:
>>> r = {1: 4, 2: 4, 4: 4, 5: 4, 6: 10}
>>> sorted(r, key=lambda k: (r[k], -k), reverse=True)
[6, 1, 2, 4, 5]
>>> sorted(r, key=lambda k: (-r[k], k))
[6, 1, 2, 4, 5]