Python 包含列表的排序字典

Python 包含列表的排序字典,python,list,sorting,dictionary,Python,List,Sorting,Dictionary,假设我有以下列表: 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'

假设我有以下列表:

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]]
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]
有了一本清单字典,事情会变得更复杂一些。假设我具备以下条件:

dict2 = {'employee1':['Paul', 23, 75000], 
         'employee2':['Mike', 32, 80000], 
         'employee3':['Jeremy', 25, 120000]}
我可以对索引2进行近似排序,如下所示:

from operator import itemgetter

sorted_dict = sorted(dict1, key=itemgetter(1))
print(sorted_dict)
>>>
[['Paul', 23, 75000], ['Jeremy', 25, 120000], ['Mike', 32, 80000]]
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]
我想用一种更好的方法对字典进行排序。我在排序字典()上找到了一篇社区wiki文章,但该文章中的字典具有常量键。在我上面的字典中,每个列表都有一个唯一的键

谢谢


首先使用Python3.4.1

不能对dict进行排序,因为它没有顺序1。但是,您可以对其项目进行排序:

sorted(d.items(), key=lambda t: t[1][1])
我们应该做到这一点

注释

  • t[1]#=>值,t[0]是“键”
  • t[1][1]#=>值中的第二个元素。
您将得到一个2元组列表(其中第一个元素是键,第二个元素是值)。当然,如果你想构造一个在事实之后有顺序的dict,你总是可以将这个2元组列表直接传递给


1更准确地说,顺序是任意的,可能会根据密钥插入、删除、python实现或版本而改变。。。(这就是为什么更容易说dict是无序的)

您可以对键进行排序并创建另一个具有有序键的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])])

我不确定您在这里要做什么--
dict(…)
将破坏您从初始排序中获得的任何顺序。您是对的,我已将默认dict更改为orderedict,它允许您定义键的顺序。此脚本输出与问题的onePerfecto相同!另外,请你给我介绍一下关于lambda最好的资源。它在我看来总是希腊语。@sedeh--
lamda参数:expression
只是创建一个函数,用给定的参数计算表达式。我想我在第一次熟悉它们的时候就用过这个: