我有一本词典:{'a':10,'b':20,'c':5,'d':5,'e':5}并希望得到
b 20
a 10
c 5
d 5
e 5
按值排序,如果我有值相等 - 它必须按字典顺序排序。
注意:使用python 2
答案 0 :(得分:2)
您可以以这种方式创建已排序元组的列表,但请注意字典本身是无序的,因此您无法对字典本身进行排序(除非您使用collections.OrderedDict
>>> d = {'a':10,'b':20,'c':5,'d':5,'e':5}
>>> list(sorted(d.items(), key = lambda i : (i[1],i[0]), reverse = True))
[('b', 20), ('a', 10), ('e', 5), ('d', 5), ('c', 5)]
答案 1 :(得分:1)
要匹配您想要的实际输出,您必须使用两个键来排序使用-
取消int值:
d = {'a':10,'b':20,'c':5,'d':5,'e':5}
for k,v in sorted(d.items(),key=lambda x:(-x[1],x[0])):
print("{} {}".format(k,v))
输出:
b 20
a 10
c 5
d 5
e 5
答案 2 :(得分:1)
在大多数情况下,您只需打印已排序的数据,在这种情况下它只是简单:
>>> for x in sorted(d.items(), key=lambda x: (-x[1], x[0])):
print x[0], x[1]
b 20
a 10
c 5
d 5
e 5
答案 3 :(得分:-1)
from collections import OrderedDict
print OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([('a', 10), ('b', 20), ('c', 5), ('d', 5), ('e', 5)])