Почему python упорядочивает мой словарь так?
Вот словарь, который у меня есть
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",
}
Но когда я распечатываю его с помощью "\n".join(myDict), я получаю этот
name
nomadic
dead
port
realOwner
secret
slaves
team
y
x
population
id
description
Я знаю, что словарь неупорядочен, но он возникает каждый раз, и я понятия не имею, почему.
Ответы
Ответ 1
Реальный вопрос должен быть "почему бы и нет"?... неупорядоченный словарь, скорее всего, реализован как хэш-таблица (на самом деле, Python документация утверждает это прямо), где порядок элементов определен, но не сразу очевиден. Ваши наблюдения полностью соответствуют правилам хэш-таблицы: кажущийся произвольный, но постоянный порядок.
Ответ 2
спецификация для встроенного типа словаря
отказывается от любого сохранения порядка, лучше подумать о словаре как неупорядоченном наборе пар key: value
...
Возможно, вы захотите проверить OrderedDict
module, который представляет собой реализацию упорядоченного словаря с порядком ввода ключа.
Ответ 3
Единственное, о чем вы можете положиться, - это то, что заказ останется неизменным, если в словаре нет изменений; например, итерация по словарю дважды без его модификации приведет к той же последовательности клавиш. Однако, хотя порядок словарей Python является детерминированным, на него могут влиять такие факторы, как порядок вставки и удаления, поэтому равные словари могут заканчиваться разными порядками:
>>> {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})