按值和词典排序字典

时间:2015-03-03 18:25:29

标签: python sorting

我有一本词典:{'a':10,'b':20,'c':5,'d':5,'e':5}并希望得到

    b 20
    a 10
    c 5
    d 5
    e 5

按值排序,如果我有值相等 - 它必须按字典顺序排序。

注意:使用python 2

4 个答案:

答案 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)])