按多个值排序字典

时间:2015-12-09 04:04:13

标签: python sorting dictionary

我有字典{'Bill': 4, 'Alex' : 4, 'Bob' : 3, "Charles": 7}

我需要先按字母顺序对这个词典进行排序,然后按字母顺序排序。如果2个项目具有相同的数字键,则需要按字母顺序排序。

此输出应为Bob, Alex, Bill, Charles

我尝试过使用lambda,list comprehension等,但我似乎无法让它们正确排序。

2 个答案:

答案 0 :(得分:22)

首先使用带有键功能的sorted(按值排序(d[k]),然后键入k):

>>> d = {'Bill': 4, 'Alex' : 4, 'Bob' : 3, "Charles": 7}    
>>> sorted(d, key=lambda k: (d[k], k))
['Bob', 'Alex', 'Bill', 'Charles']

答案 1 :(得分:5)

使用sorted()对字典的项目(它们是元组)进行排序。您可以通过字典的值指定排序键,然后指定其键:

>>> d = {'Bill': 4, 'Alex' : 4, 'Bob' : 3, "Charles": 7}
>>> sorted(d.items(), key=lambda x:(x[1],x[0]))
[('Bob', 3), ('Alex', 4), ('Bill', 4), ('Charles', 7)]
>>> [t[0] for t in sorted(d.items(), key=lambda x:(x[1],x[0]))]
['Bob', 'Alex', 'Bill', 'Charles']