我正在研究Python的sorted
函数的细节,并且想知道如何对数据结构进行排序:
dict1 = dict(emp1={"Name": "McKay", "Job": "Developer"}, emp2={"Name": "Mandy", "Job": "Nurse"})
在嵌套字典中的“名称”或“作业”字段上。我看过这个网站上的其他一些结果,看起来它最好是凌乱的,最糟糕的是混乱和凌乱。如果要进行排序,通常建议不要使用这种类型的数据结构吗? (我知道一个元组会是一个更好的选择,但这对我自己的好奇心来说是一个学术问题。)
答案 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