在python中对字典进行排序,值按降序排序,如果是冲突则按键

时间:2014-09-25 15:01:05

标签: python list sorting python-3.x dictionary

我有一本词典

r = {1: 4, 2: 4, 4: 4, 5: 4, 6: 10}

我想根据值(降序)对此进行排序,如果冲突则按键排序(升序)。 即输出应

[6 ,1 ,2 ,4 ,5]

我该怎么做?

如果我有List而不是字典,上述内容会变得容易吗?即

r = [(1, 4), (2, 4), (4, 4), (5, 4), (6, 10)]

1 个答案:

答案 0 :(得分:4)

使用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]