2012-08-01 158 views
14

如何基於嵌套字典的內部值排序Python字典?基於嵌套字典值排序Python字典

例如,整理以下mydict基礎上context值:

mydict = { 
    'age': {'context': 2}, 
    'address': {'context': 4}, 
    'name': {'context': 1} 
} 

結果應該是這樣的:

{ 
    'name': {'context': 1}, 
    'age': {'context': 2}, 
    'address': {'context': 4}  
} 
+1

你想要一個列表輸出嗎?或字典輸出? – Deniz 2012-08-01 06:34:16

回答

15
>>> from collections import OrderedDict 
>>> mydict = { 
     'age': {'context': 2}, 
     'address': {'context': 4}, 
     'name': {'context': 1} 
} 
>>> OrderedDict(sorted(mydict.iteritems(), key=lambda x: x[1]['context'])) 
OrderedDict([('name', {'context': 1}), ('age', {'context': 2}), ('address', {'context': 4})]) 
5

您不能對一本字典,不管你多麼努力,因爲它們是無序的集合。改用OrderedDict表格collections模塊。

+0

或者,也許可以在鍵上做一個粗糙的列表理解,使用lambda來查看每個鍵的值 - 這麼做的困難是爲什麼使用OrderedDict的一個很好的教訓。 – 2012-08-02 00:49:15

+0

更新:自python 3.6起,字典插入順序被保留,所以這個語句不再是真的。 – pelson 2017-12-19 07:42:01