2012-08-01 6 views
14

Wie sortieren Sie ein Python-Wörterbuch basierend auf dem inneren Wert eines verschachtelten Wörterbuchs?Sortieren des Python-Wörterbuchs basierend auf verschachtelten Wörterbuchwerten

Zum Beispiel Art mydict unten basierend auf dem Wert von context:

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

Das Ergebnis sollte so aussehen:

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

Möchten Sie eine Listenausgabe? oder eine Wörterbuchausgabe? – Deniz

Antwort

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

Sie keinen Wörterbuch egal sortieren kann, wie hart Sie versuchen, weil sie eine ungeordnete Sammlung sind. Verwenden Sie stattdessen OrderedDict Formular collections Modul.

+0

Alternativ könnte man auch ein kniffliges Listenverständnis auf den Schlüsseln machen, indem man einen Lambda verwendet, um den Wert jedes Schlüssels zu betrachten - und die Schwierigkeit, dies zu tun, ist eine großartige Lektion, warum man ein 'OrderedDict' verwendet. –

+0

Update: ab Python 3.6, Wörterbuch Reihenfolge bleibt erhalten, so dass diese Aussage nicht mehr wahr ist. – pelson

Verwandte Themen