¿Cómo ordeno un diccionario por clave?

Resuelto Antony asked hace 12 años • 33 respuestas

¿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}
Antony avatar Jan 25 '12 17:01 Antony
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 dictmanera 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 odesté 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
NPE avatar Jan 25 '2012 10:01 NPE

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}
Dipu avatar Oct 30 '2017 14:10 Dipu