¿Por qué Python ordena mi diccionario de esa manera? [duplicar]

Resuelto Teifion asked hace 15 años • 3 respuestas

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é.

Teifion avatar Feb 09 '09 01:02 Teifion
Aceptado

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 dictimplementació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).

Konrad Rudolph avatar Feb 08 '2009 18:02 Konrad Rudolph

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: valuepares...

Es posible que desee consultar el OrderedDictmódulo , que es una implementación de un diccionario ordenado con orden de inserción de claves.

Christian C. Salvadó avatar Feb 08 '2009 18:02 Christian C. Salvadó

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})
Miles avatar Feb 10 '2009 09:02 Miles