¿Por qué Python ordena mi diccionario de esa manera? [duplicar]
aqui esta el diccionario que tengo
propertyList = {
"id": "int",
"name": "char(40)",
"team": "int",
"realOwner": "int",
"x": "int",
"y": "int",
"description": "char(255)",
"port": "bool",
"secret": "bool",
"dead": "bool",
"nomadic": "bool",
"population": "int",
"slaves": "int",
}
Pero cuando lo imprimo con "\n".join(myDict) me sale esto
name
nomadic
dead
port
realOwner
secret
slaves
team
y
x
population
id
description
Sé que un diccionario está desordenado pero siempre sale igual y no tengo idea de por qué.
Para versiones anteriores de Python, la verdadera pregunta debería ser "¿por qué no?" — Un diccionario desordenado generalmente se implementa como una tabla hash donde el orden de los elementos está bien definido pero no es inmediatamente obvio ( la documentación de Python solía indicar esto ). Sus observaciones coinciden perfectamente con las reglas de una tabla hash: orden aparentemente arbitrario, pero constante.
Desde entonces, Python ha cambiado su dict
implementación para preservar el orden de inserción, y esto está garantizado a partir de Python 3.7 . Por lo tanto, la implementación ya no constituye una tabla hash pura (pero todavía se utiliza una tabla hash en su implementación).
La especificación para el tipo de diccionario incorporado renuncia a cualquier preservación del orden; es mejor pensar en un diccionario como un conjunto desordenado de key: value
pares...
Es posible que desee consultar el OrderedDict
módulo , que es una implementación de un diccionario ordenado con orden de inserción de claves.
Lo único en lo que puede confiar acerca del orden del diccionario es que el orden seguirá siendo el mismo si no hay modificaciones en el diccionario; por ejemplo, iterar dos veces sobre un diccionario sin modificarlo dará como resultado la misma secuencia de claves. Sin embargo, aunque el orden de los diccionarios de Python es determinista, puede verse influenciado por factores como el orden de las inserciones y eliminaciones, por lo que diccionarios iguales pueden terminar con ordenamientos diferentes:
>>> {1: 0, 2: 0}, {2: 0, 1: 0}
({1: 0, 2: 0}, {1: 0, 2: 0})
>>> {1: 0, 9: 0}, {9: 0, 1: 0}
({1: 0, 9: 0}, {9: 0, 1: 0})