我有一本词典
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)]
答案 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]