2012-08-13 35 views
13

Duplicar posible:
In Python how do I sort a list of dictionaries by values of the dictionary?
Sorting Python dictionary based on nested dictionary values¿Cómo ordenar un diccionario de Python por valor?

Tengo diccionario de la forma como se menciona a continuación:

a_dict = { 'e': (1, 100), 'a': (2, 3) } 

Soy incapaz de solucionar el problema por el segundo elemento de la tupla El diccionario resultante aparecerá de la siguiente manera:

a_dict = { 'a': (2, 3), 'e': (1, 100) } 
+0

@Tichodroma: eso es una lista de d ictionaries, este es solo * un * diccionario, no en una lista. –

Respuesta

12

Los diccionarios no se pueden clasificar como tal, pero se puede ordenar su contenido:

sorted(a_dict.items(), key=lambda (k, (v1, v2)): v2) 
sorted(a_dict.items(), key=lambda item: item[1][1]) # Python 3 

Usted puede poner los resultados en un collections.OrderedDict (desde 2,7):

OrderedDict(sorted(a_dict.items(), key=lambda (k, (v1, v2)): v2)) 
OrderedDict(sorted(a_dict.items(), key=lambda item: item[1][1]) # Python 3 
+3

El argumento de desempaquetado hecho en su lambda solo funcionará en Python 2.x. En Python 3 tendrás que hacer 'key = lambda k, v: v [1]'. – Blckknght

1

En su ejemplo está utilizando lista de diccionarios. La clasificación por dict clave:

mydict = {'carl':40, 
      'alan':2, 
      'bob':1, 
      'danny':3} 

for key in sorted(mydict.iterkeys()): 
    print "%s: %s" % (key, mydict[key]) 

alan: 2 
bob: 1 
carl: 40 
danny: 3 

Si desea ordenar dict por valor, por favor ver Sort a Python dictionary by value

+1

¿A qué lista de diccionarios hace referencia? El código en la pregunta tiene un diccionario con tuplas como valores, y ninguna lista en absoluto. – Blckknght

+0

Por supuesto que tienes razón. Cometí un estúpido error. – ymn

Cuestiones relacionadas