2012-08-01 14 views
14

¿Cómo se ordena un diccionario de Python basado en el valor interno de un diccionario anidado?Clasificación del diccionario de Python basado en valores de diccionario anidados

Por ejemplo, clasificar mydict a continuación sobre la base del valor de context:

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

El resultado debe ser como este:

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

¿Desea obtener una lista de salida? o una salida de diccionario? – Deniz

Respuesta

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

No puede ordenar un diccionario no importa cuánto se esfuerce , porque son una colección desordenada. Use OrderedDict el módulo de forma collections en su lugar.

+0

Alternativamente, uno probablemente podría hacer una comprensión de la lista de las teclas, usando una lambda para ver el valor de cada tecla, y la dificultad de hacerlo es una gran lección de por qué usar un 'OrderedDict'. –

+0

Actualización: a partir de Python 3.6, se conserva el orden de inserción del diccionario, por lo que esta declaración ya no es verdadera. – pelson

Cuestiones relacionadas