假设我有以下列表清单:
dict1 = [['Jeremy', 25, 120000], ['Paul', 23, 75000], ['Mike', 32, 80000]]
我可以轻松对索引2上的列表进行排序,如下所示:
from operator import itemgetter
sorted_dict = sorted(dict1, key=itemgetter(1))
print(sorted_dict)
>>>
[['Paul', 23, 75000], ['Jeremy', 25, 120000], ['Mike', 32, 80000]]
使用列表字典会让事情变得复杂一些。假设我有以下内容:
dict2 = {'employee1':['Paul', 23, 75000],
'employee2':['Mike', 32, 80000],
'employee3':['Jeremy', 25, 120000]}
我可以对索引2进行近似排序,如下所示:
from operator import itemgetter
#First, extract lists
result1 = dict2.values()
#Second, sort list by index 2
result2 = sorted(result1, key=itemgetter(1))
#Finally, use for loop to sort dictionary
for a in result2:
for b in dict2.keys():
if a == dict2[b]:
print("{0}:{1}".format(b,a))
>>>
employee1:['Paul', 23, 75000]
employee3:['Jeremy', 25, 120000]
employee2:['Mike', 32, 80000]
我想要一种更好的方法来对字典进行排序。我在排序字典(here)上找到了一个社区wiki帖子,但该帖子中的字典有常量键。在上面的字典中,每个列表都有一个唯一的密钥。
感谢。
使用Python 3.4.1
答案 0 :(得分:2)
首先,您无法对dict
进行排序,因为它没有订单 1 。您可以对其项目进行排序:
sorted(d.items(), key=lambda t: t[1][1])
应该做的伎俩。
注释
t[1] # => the "value", t[0] is the "key"
t[1][1] # => The second element in the value.
您将获得一个2元组列表(其中第一个元素是键,第二个元素是值)。当然,你总是可以将这个2元组列表直接传递给collections.OrderedDict
,如果你想构建一个事后排序的字典......
1 更准确地说,订单是任意并且可能会根据键插入,删除,python实现或版本...而改变(这就是为什么它的原因)更容易说dict是无序的)
答案 1 :(得分:1)
您可以对键进行排序并使用有序键创建另一个dict
>>>>from collections import OrderedDict
>>>>dict2 = {'employee1':['Paul', 23, 75000],
'employee2':['Mike', 32, 80000],
'employee3':['Jeremy', 25, 120000]}
>>>>OrderedDict([
#new item: ordered key, it's value form original dict
( x, dict2[x])
#sort keys of original dict
for x in sorted(dict2, key=lambda x: dict2[x][1])
])
OrderedDict([('employee1', ['Paul', 23, 75000]), ('employee3', ['Jeremy', 25, 120000]), ('employee2', ['Mike', 32, 80000])])