Понимание порядка словаря python - PullRequest
2 голосов
/ 13 июля 2020

Может кто-нибудь объяснить, как упорядочены словари python (v3.5)?

data = {"John": 23, "Rick": 33, "Mary": 63, "Ron": 23, "Joel": 51}

for key in data:
        print("Your name is " + key + ", and you are also " + str(data[key]) + " years old.")

Фактический результат:

Your name is Rick, and you are also 33 years old.
Your name is Ron, and you are also 23 years old.
Your name is Mary, and you are also 63 years old.
Your name is John, and you are also 23 years old.
Your name is Joel, and you are also 51 years old.

Ожидаемый результат (порядок словаря) :

Your name is John, and you are also 23 years old.
Your name is Rick, and you are also 33 years old.
Your name is Mary, and you are also 63 years old.
Your name is Ron, and you are also 23 years old.
Your name is Joel, and you are also 51 years old.

Ответы [ 2 ]

8 голосов
/ 13 июля 2020

Это зависит от версии Python, которую вы используете.

До Python 3.6

Словари использовали упорядочение базовой функции ha sh. Некоторые типы имеют соленые хэши, поэтому это означает, что вы получаете различный порядок при каждом вызове.

Python 3.6 +

Словари упорядочены по вставке, т. Е. Словари запоминают порядок вставленных элементов. Из документы :

Аспект сохранения порядка этой новой реализации считается деталью реализации и не должен полагаться на

Python 3.7

Гвидо ван Россум объявил о том, что с Python 3.7 диктовок в все реализации Python должны сохранять порядок вставки .

1 голос
/ 13 июля 2020

В отличие от списка, элементы, хранящиеся в словаре, не хранятся в каком-либо определенном порядке; фактически, Python рандомизирует их слева направо, чтобы обеспечить быстрый поиск. Ключи предоставляют символы c местоположения (не физического) элементов в словаре. Если вы думаете о списке как о упорядоченных коллекциях объектов, вы можете думать о словарях как о неупорядоченных коллекциях. Элементы сохраняются и выбираются по ключу, а не по позиционному смещению :)

...