¿Cómo ordeno un diccionario por clave?
¿Cómo clasifico un diccionario por sus claves?
Entrada de ejemplo:
{2:3, 1:89, 4:5, 3:0}
Salida deseada:
{1:89, 2:3, 3:0, 4:5}
Aceptado
Nota: para Python 3.7+, vea esta respuesta
Los diccionarios estándar de Python están desordenados (hasta Python 3.7). Incluso si ordenara los pares (clave, valor), no podría almacenarlos de una dict
manera que preservara el orden.
La forma más sencilla es utilizar OrderedDict
, que recuerda el orden en el que se han insertado los elementos:
In [1]: import collections
In [2]: d = {2:3, 1:89, 4:5, 3:0}
In [3]: od = collections.OrderedDict(sorted(d.items()))
In [4]: od
Out[4]: OrderedDict([(1, 89), (2, 3), (3, 0), (4, 5)])
No importa cómo od
esté impreso el camino; funcionará como se esperaba:
In [11]: od[1]
Out[11]: 89
In [12]: od[3]
Out[12]: 0
In [13]: for k, v in od.iteritems(): print k, v
....:
1 89
2 3
3 0
4 5
Pitón 3
Para los usuarios de Python 3, es necesario utilizar .items()
en lugar de .iteritems()
:
In [13]: for k, v in od.items(): print(k, v)
....:
1 89
2 3
3 0
4 5
Para CPython/PyPy 3.6 y cualquier Python 3.7 o superior, esto se hace fácilmente con:
>>> d = {2:3, 1:89, 4:5, 3:0}
>>> dict(sorted(d.items()))
{1: 89, 2: 3, 3: 0, 4: 5}