我有一本字典

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]

10-06 14:27
查看更多