值得在嵌套字典上使用sorted(,key =)吗?

时间:2016-01-12 18:17:48

标签: python sorting dictionary

我正在研究Python的sorted函数的细节,并且想知道如何对数据结构进行排序:

dict1 = dict(emp1={"Name": "McKay", "Job": "Developer"}, emp2={"Name": "Mandy", "Job": "Nurse"})

在嵌套字典中的“名称”或“作业”字段上。我看过这个网站上的其他一些结果,看起来它最好是凌乱的,最糟糕的是混乱和凌乱。如果要进行排序,通常建议不要使用这种类型的数据结构吗? (我知道一个元组会是一个更好的选择,但这对我自己的好奇心来说是一个学术问题。)

1 个答案:

答案 0 :(得分:4)

如果您不介意处理排序后的输出是序列(字典没有任何排序),您可以对包含的键,值或键值进行排序对很好。

例如,要获取按名称排序的嵌套字典,就像:

一样简单
sorted(dict1.values(), key=lambda d: d['Name'])

这将生成一个排序列表,其中包含2个嵌套字典作为元素。 key函数只需根据您需要的排序输出进行调整;对于键,您需要查找相关值:

sorted(dict1, key=lambda k: dict1[k]['Name'])

对字典的迭代会生成密钥,因此您需要传递给sorted()的是字典本身。

使用dict.items()生成一系列(key, value)对,然后再次调整密钥以从中提取值到排序:

sorted(dict1.items(), key=lambda kv: kv[1]['Name'])

后者演示:

>>> dict1 = dict(emp1={"Name": "McKay", "Job": "Developer"}, emp2={"Name": "Mandy", "Job": "Nurse"})
>>> for emp, info in sorted(dict1.items(), key=lambda kv: kv[1]['Name']):
...     print('{0}: {1[Name]} - {1[Job]}'.format(emp, info))
...
emp2: Mandy - Nurse
emp1: McKay - Developer
>>> for emp, info in sorted(dict1.items(), key=lambda kv: kv[1]['Job']):
...     print('{0}: {1[Name]} - {1[Job]}'.format(emp, info))
...
emp1: McKay - Developer
emp2: Mandy - Nurse