RE: [Python-es] Ordenar diccionario según valores.

Batista, Facundo FBatista en uniFON.com.ar
Jue Oct 21 20:43:17 CEST 2004


[Victor Peinado]

#- ¿Cómo puedo ordenar un diccionario atendiendo a los valores?
#- 
#- Se me ha ocurrido copiar el diccionario en otro nuevo, substituyendo
#- los valores del primero por tuplas (valor, clave) en el segundo,
#- funciona pero es un poco artificial. Seguro que hay una forma más
#- sencilla. ¿Alguna idea? Gracias de antemano.

Un diccionario, por definición, no tiene órden (por lo tanto no lo puedes
ordenar generando otro diccionario):

>>> d = {'a':3, 'b':7, 'c':5}
>>> d
{'a': 3, 'c': 5, 'b': 7}

Lo que tienes que hacer es generar una lista con los valores del
diccionario:

>>> l = d.items()
>>> l
[('a', 3), ('c', 5), ('b', 7)]

y luego ordenar por lo que te interese:

>>> l.sort()
>>> l
[('a', 3), ('b', 7), ('c', 5)]
>>> l.sort(key=lambda x: x[1])
>>> l
[('a', 3), ('c', 5), ('b', 7)]

Notá que la última expresión es válida a partir de Py2.4. Si no puedes
actualizar tu Python puedes usar lo siguiente (que es más lento):

>>> l.sort(lambda x,y:cmp(x[1], y[1]))
>>> l
[('a', 3), ('c', 5), ('b', 7)]

Saludos.

.	Facundo




Más información sobre la lista de distribución Python-es