2012-08-01 17 views
14

Jak sortować słownik Python na podstawie wewnętrznej wartości zagnieżdżonego słownika?Sortowanie słownika Python na podstawie zagnieżdżonych wartości słownika

Na przykład, rodzaj mydict poniżej na podstawie wartości context:

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

Wynik powinien być tak:

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

Czy chcesz wyświetlić listę? lub wynik słownika? – Deniz

Odpowiedz

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

Nie można sortować słownika nie ważne jak bardzo się starasz , ponieważ są kolekcją nieuporządkowaną. Zamiast tego należy użyć modułu OrderedDict w postaci collections.

+0

Alternatywnie, prawdopodobnie można zrobić gstrarly zrozumienie list na klawiszach, używając lambda, aby przyjrzeć się wartości każdego klucza - a trudność w wykonaniu tego jest wspaniałą lekcją, dlaczego użyć 'OrderedDict'. –

+0

Aktualizacja: od python 3.6, kolejność wstawiania słownika jest zachowywana, więc ta instrukcja nie jest już prawdą. – pelson

Powiązane problemy