¿Cómo ordeno un diccionario por sus claves?
Ejemplo de entrada:
{2:3, 1:89, 4:5, 3:0}
Salida deseada:
{1:89, 2:3, 3:0, 4:5}
antonio
¿Cómo ordeno un diccionario por sus claves?
Ejemplo de entrada:
{2:3, 1:89, 4:5, 3:0}
Salida deseada:
{1:89, 2:3, 3:0, 4:5}
Jaime
Los diccionarios en sí mismos no tienen elementos ordenados como tales, si desea imprimirlos, etc. en algún orden, aquí hay algunos ejemplos:
En Python 2.4 y superior:
mydict = {'carl':40,
'alan':2,
'bob':1,
'danny':3}
for key in sorted(mydict):
print "%s: %s" % (key, mydict[key])
da:
alan: 2
bob: 1
carl: 40
danny: 3
(Python por debajo de 2.4 🙂
keylist = mydict.keys()
keylist.sort()
for key in keylist:
print "%s: %s" % (key, mydict[key])
Fuente: http://www.saltycrane.com/blog/2007/09/how-to-sort-python-dictionary-by-keys/
También puede usar OrderedDict en python 2.4+ como en la respuesta de NPE
– Radtek
29 de enero de 2015 a las 22:09
y si está usando elementos (), puede hacerlo como for key, value in sorted(mydict.items())"
– pitido_cheque
4 de febrero de 2020 a las 2:07
Los diccionarios en sí mismos no tienen elementos ordenados como tales -> ya no es cierto!
– minexew
6 de abril de 2020 a las 6:46
¿Cómo es que puedes explicarlo?
– Jaime
6 de abril de 2020 a las 9:31
@James Ver enlace.
– Espacio de búsqueda
28 de junio de 2021 a las 17:10
Otra forma de escribir lo mismo es usar una comprensión: {key:d[key] for key in sorted(d.keys())}
– flujo2k
27 de noviembre de 2019 a las 22:57
¡Gran delineador! No conocía esa nueva característica. Me funciona en Centos 7 en Python 3.6.8.
– Timmotej
2 de junio de 2021 a las 13:19
Esta es una respuesta genial. Pero no intente acortarlo encerrando sorted
con {}
como en {sorted(d.items())}
. Eso solo intentará crear un conjunto.
– ChaimG
1 de septiembre de 2021 a las 14:04
La respuesta de @flow2k (usando “comprensión”) se puede simplificar: {key:d[key] for key in sorted(d)}
ya que sorted(d)
devuelve una lista ordenada de claves de d
– Julián – BrainAnnex.org
9 oct 2021 a las 9:07
@Timo sorted(d.items())
devuelve un iterable al par clave y valor ordenado, no un diccionario
– Dipu
31 de marzo a las 22:25
dennis
De de pitón collections
documentación de la biblioteca:
>>> from collections import OrderedDict
>>> # regular unsorted dictionary
>>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
>>> # dictionary sorted by key -- OrderedDict(sorted(d.items()) also works
>>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
>>> # dictionary sorted by value
>>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])
>>> # dictionary sorted by length of the key string
>>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0])))
OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])
¡increíble! Chicos, si quieren invertir el orden (ascendente A descendente), simplemente agreguen reverse=True
p.ej OrderedDict(sorted(d.items(), reverse=True, key=lambda t: t[0]))
– benscabbia
28 de agosto de 2016 a las 20:03
En PyCharm, no importa qué diccionario use, siempre recibo esta advertencia: Unexpected type(s): (List[str]) Possible types: (Mapping) (Iterable[Tuple[Any, Any]])
– Euler_Salter
24/07/2018 a las 10:00
GrantJ
Hay una serie de módulos de Python que proporcionan implementaciones de diccionarios que mantienen automáticamente las claves ordenadas. Considera el contenedores ordenados módulo que es puro-Python e implementaciones rápidas como C. También hay una comparación de rendimiento con otras opciones populares comparadas entre sí.
El uso de un dict ordenado es una solución inadecuada si necesita agregar y eliminar constantemente pares clave/valor al mismo tiempo que itera.
>>> from sortedcontainers import SortedDict
>>> d = {2:3, 1:89, 4:5, 3:0}
>>> s = SortedDict(d)
>>> s.items()
[(1, 89), (2, 3), (3, 0), (4, 5)]
El tipo SortedDict también admite búsquedas y eliminación de ubicaciones indexadas, lo que no es posible con el tipo de dictado incorporado.
>>> s.iloc[-1]
4
>>> del s.iloc[2]
>>> s.keys()
SortedSet([1, 2, 4])
¡increíble! Chicos, si quieren invertir el orden (ascendente A descendente), simplemente agreguen reverse=True
p.ej OrderedDict(sorted(d.items(), reverse=True, key=lambda t: t[0]))
– benscabbia
28 de agosto de 2016 a las 20:03
En PyCharm, no importa qué diccionario use, siempre recibo esta advertencia: Unexpected type(s): (List[str]) Possible types: (Mapping) (Iterable[Tuple[Any, Any]])
– Euler_Salter
24/07/2018 a las 10:00
usuario3769249
Simplemente:
d = {2:3, 1:89, 4:5, 3:0}
sd = sorted(d.items())
for k,v in sd:
print k, v
Producción:
1 89
2 3
3 0
4 5
sd
es una lista de tuplas, no un diccionario. (Aunque sigue siendo útil.)
– nischi
24 de noviembre de 2016 a las 9:53
Creo que su declaración de impresión necesita (). imprimir (k,v)
– Den Vog
14 de agosto de 2020 a las 19:56
Solo necesita () para python 3. print k, v
funciona bien en python 2 porque print
es una palabra clave, no una función en python 2.
– Bgil Midol
30 de junio de 2021 a las 15:20
@KarlKnechtel: mi caso de uso es que tengo una aplicación CLI que tiene un menú primitivo y las opciones de menú están en un diccionario como teclas. Me gustaría mostrar las teclas en orden alfabético para la cordura del usuario.
– Randy
3 de junio de 2014 a las 19:53
posible duplicado de Dictionary en python con el orden que establecí al inicio
– nbro
10 de enero de 2015 a las 2:05
@Nayuki, dado que esta es una pregunta de Python, estaba equiparando el diccionario con
dict
-Ryan Haining
19 de enero de 2017 a las 7:42
Tenga en cuenta que los dictados ahora están ordenados por orden de inserción (python 3.6+). Algunas respuestas a continuación señalan esto.
– matiasg
30 jun 2019 a las 21:20
@matiasg tenga en cuenta que en Python 3.6, los dictados que conservan el orden de inserción son un detalle de implementación de CPython. Es con Python 3.7 que la preservación del orden de inserción de dictados se convierte oficialmente en parte del lenguaje.
– robertspierre
25 de septiembre de 2020 a las 14:33