Estoy jugando con los diccionarios por primera vez y está surgiendo algo que me confunde. Al usar dos listas para crear un nuevo diccionario, el orden de los términos de la lista para la parte clave parece ser incorrecto. Aquí está mi código:

list1 = ["a", "b", "c", "d"]
list2 = [5,3,7,3] 
newDict = {list1[c]: number for c, number in enumerate(list2)}
print(newDict)

Esto me da lo siguiente:

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

¿Por qué está pasando esto? Seguramente el valor 'c' que obtiene términos de la lista va de 0 en adelante, entonces, ¿por qué no está creando el diccionario con las letras en el mismo orden?

Gracias.

1
user9410913 26 feb. 2018 a las 04:33

3 respuestas

La mejor respuesta

Para fines de eficiencia, los diccionarios tradicionales de python no están ordenados. Si necesita orden, entonces necesita OrderedDict:

>>> from collections import OrderedDict
>>> newDict = OrderedDict((list1[c], number) for c, number in enumerate(list2))
>>> print(newDict)
OrderedDict([('a', 5), ('b', 3), ('c', 7), ('d', 3)])

En Python 3.7, diccionarios de Python ordinarios, implementados usando Se ordenará un nuevo algoritmo. Hasta entonces, si necesita orden, use OrderedDict.

2
John1024 26 feb. 2018 a las 01:49

Los diccionarios de Python no conservan su orden, pero hay otro tipo de datos que sí lo hace: OrderedDict, del módulo de colecciones.

1
Sponja 26 feb. 2018 a las 01:38

Los diccionarios no están ordenados. De hecho, si ejecuta su programa en una computadora diferente, puede obtener un orden de teclas diferente. Esta es una característica intencional del diccionario incorporado en python.

Para entender por qué, eche un vistazo a esta pregunta de stackoverflow.

1
nareddyt 26 feb. 2018 a las 01:40