Но когда я распечатываю его с помощью "\n".join (myDict), я получаю это
name nomadic dead port realOwner secret slaves team y x population id description
Я знаю, что словарь неупорядочен, но каждый раз получается одно и то же, и я понятия не имею почему.
Переведено автоматически
Ответ 1
Для более старых версий Python реальный вопрос должен быть “почему нет?” — Неупорядоченный словарь обычно реализуется в виде хэш-таблицы, где порядок элементов четко определен, но не сразу очевиден (документация Python, используемая для указания этого). Ваши наблюдения идеально соответствуют правилам хэш-таблицы: кажущийся произвольным, но постоянный порядок.
С тех пор Python изменил свою dict реализацию, чтобы сохранить порядок вставки, и это гарантировано начиная с Python 3.7. Таким образом, реализация больше не представляет собой чистую хэш-таблицу (но хэш-таблица все еще используется в ее реализации).
Ответ 2
Спецификация для типа встроенного словаря исключает какое-либо сохранение порядка, лучше всего думать о словаре как о неупорядоченном наборе key: value пар...
Возможно, вы захотите проверить OrderedDict модуль, который представляет собой реализацию упорядоченного словаря с порядком вставки ключей.
Ответ 3
Единственное, на что вы можете положиться в упорядочении словарей, это то, что порядок останется прежним, если в словарь не будут внесены изменения; например, повторение словаря дважды без его изменения приведет к той же последовательности ключей. Однако, хотя порядок словарей Python детерминирован, на него могут влиять такие факторы, как порядок вставок и удалений, поэтому одинаковые словари могут иметь разный порядок: