2009-02-22 34 views
109

Tengo un dict donde cada clave hace referencia a un valor int. ¿Cuál es la mejor manera de clasificar las claves en una lista según los valores?Clasificar claves del diccionario en python

+7

Además, esta pregunta por la clasificación por clave, la respuesta es ligada sobre la clasificación por valor. – ForeverWintr

+0

las respuestas a continuación devuelven una lista ordenada de las teclas solamente (lo cual es trivial). la respuesta a la pregunta "duplicado" sobre ordenar por valor devuelve una lista ordenada de pares clave/valor (ordenados por valor). Si lo quiere ordenado por clave, simplemente use 0 en lugar de como el parámetro para operator.itemgetter(). – ScienceFriction

Respuesta

91
>>> mydict = {'a':1,'b':3,'c':2} 
>>> sorted(mydict, key=lambda key: mydict[key]) 
['a', 'c', 'b'] 
12
my_list = sorted(dict.items(), key=lambda x: x[1]) 
+1

@ user815423426 editó mi publicación 's/list/my_list /' porque "list es una palabra clave en python". Su edición está bien, pero la lista no es una palabra clave (c.f. https://docs.python.org/3/reference/lexical_analysis.html#keywords), por lo que mi fragmento de programa se compilaría y se ejecutaría (bytecode-). Sin embargo, es un nombre en el espacio de nombres '__builtins__', y es una mala práctica sombrear ese nombre -con una variable locale llamada list-y horrible para anularlo -con una variable global llamada list, p. 'list = tuple'. –

2
[v[0] for v in sorted(foo.items(), key=lambda(k,v): (v,k))] 
346

I como éste:

sorted(d, key=d.get) 
+0

Bien, pensé que sería bueno tener una solución elegante que proporcione pares (clave, valor) ordenados por clave. ... y no requiere proporcionar el nombre de la variable dict más de una vez (tiendo a tener nombres de variables descriptivos muy largos). d.iteritems() todavía parece ser el más útil. – travc

+0

En segundo lugar, la elegante y clasificada solución k, v pair – crock1255

Cuestiones relacionadas