按值排序然后按键字母顺序对Python3字典进行排序

4

假设我有一个字典,像这样:

h=[('a',5), ('f', 3), ('b',3), ('c',3), ('d',1), ('e',4) ]

我希望按照以下方式对其进行排序:

[('a',5), ('e',4), ('b',3), ('c',3), ('f',3), ('d',1)]

我可以使用Python 2 来解决这个问题,类似这样:

sortedList= sorted(h.iteritems(),key=lambda(k,v):(-v,k))

我可以用Python 3编写以下代码来实现此功能:
import operator
sortedList =sorted(h.items(), key=operator.itemgetter(1,0) , reverse=True)

但实际输出的结果是这样的。
[('a',5), ('e',4), ('f',3), ('c',3), ('b',3),  ('d',1)]

我该如何反转比赛的决胜操作?


2
在py3中唯一不允许的事情是lambda中的解包(unpacking)。lambda x: (-x[1], x[0])在两个版本中都可以运行。 - roippi
Python的排序是稳定的 - 因此您可以只对其进行两次排序。 - Jon Clements
h是一个列表,所以在Python 3中不能使用h.items()。 - gypaetus
1个回答

5
你可以在Python 3中使用此调用来对函数进行排序:
sortedList = sorted(h, key=lambda k: (-k[1], k[0]))

这将产生与Python 2排序相同的结果:
[('a',5), ('e',4), ('b',3), ('c',3), ('f',3), ('d',1)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接