Voici le dictionnaire que j'ai
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",
}
Mais quand je l'imprime avec "\ n" .join (myDict) j'obtiens ceci
name
nomadic
dead
port
realOwner
secret
slaves
team
y
x
population
id
description
Je sais qu'un dictionnaire n'est pas ordonné mais il sort toujours à chaque fois et je ne sais pas pourquoi.
Pour les anciennes versions de Python, la vraie question devrait être "pourquoi pas?" - Un dictionnaire non ordonné est généralement implémenté sous la forme d'une table de hachage où l'ordre des éléments est bien défini mais pas immédiatement évident ( la documentation Python utilisée pour énoncez ceci ) Vos observations correspondent parfaitement aux règles d'une table de hachage: ordre arbitraire apparent, mais constant.
Python a depuis changé son implémentation dict
pour conserver l'ordre d'insertion, et c'est garanti à partir de Python 3.7 . L'implémentation ne constitue donc plus une table de hachage pure (mais une table de hachage est toujours utilisée dans son la mise en oeuvre).
Le spécification pour le type de dictionnaire intégré rejette toute préservation de l'ordre, il est préférable de considérer un dictionnaire comme un ensemble non ordonné de key: value
paires...
Vous voudrez peut-être vérifier le module OrderedDict
, qui est une implémentation d'un dictionnaire ordonné avec l'ordre d'insertion des clés.
La seule chose à propos de la commande de dictionnaire sur laquelle vous pouvez compter est que la commande restera la même s'il n'y a pas de modifications dans le dictionnaire; Par exemple, itérer deux fois sur un dictionnaire sans le modifier entraînera la même séquence de touches. Cependant, bien que l'ordre des dictionnaires Python soit déterministe, il peut être influencé par des facteurs tels que l'ordre des insertions et des suppressions, donc des dictionnaires égaux peuvent se retrouver avec des ordonnances différentes:
>>> {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})