Почему 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})