按值和字典顺序对字典进行排序

3

我有一个字典:{'a':10,'b':20,'c':5,'d':5,'e':5},想要获取它的内容。

    b 20
    a 10
    c 5
    d 5
    e 5

按值排序,如果有相等的值,则必须按字典序排序。

注意:使用Python 2。

4个回答

6
为了得到您想要的实际输出,您需要使用两个键来排序,通过使用 - 反转 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

1
如果你只是让数字变成负数,就不必使用ord - jamylak
@jamylak,是的。已编辑,谢谢。 - Padraic Cunningham

3
你可以使用这种方式创建一个排序的元组列表,但请注意字典本身是无序的,所以你不能对字典本身进行排序(除非你使用类似 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
在大多数情况下,您只需要打印已排序的数据,这种情况下很简单:
>>> 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

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

这是为了按照您想要的格式获取输出,但是我同意@Cyber的观点。 - Amrita Sawant

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