my_dict = {'a':10, 'b':20, 'c':30}

for key in my_dict:
    print key, my_dict[key]

Дает

a 10
c 30
b 20

А также

my_dict = {'a':10, 'c':30, 'b':20}

for key in my_dict:
    print key, my_dict[key]

Дает тот же результат

a 10
c 30
b 20

Мне было интересно, почему вывод не похож на 10 b 20 c 30. Как осуществляется выбор ключей при переборе словаря? Это случайно?

4
prashanth 16 Дек 2015 в 10:16

4 ответа

Лучший ответ

Метод keys () объекта словаря возвращает список всех ключей, используемых в словаре, в произвольном порядке (если вы хотите его отсортировать, просто примените к нему функцию sorted ()). Чтобы проверить, есть ли один ключ в словаре, используйте ключевое слово in.

Порядок ключей в dict() не определен (это зависит от того, какую реализацию Python вы используете). Чтобы перебрать dict упорядоченным образом:

my_dict = {'a': 10, 'b': 20, 'c': 30}
for key in sorted(my_dict.keys()):
    print key, my_dict[key]

Это даст вам правильный порядок:

a 10
b 20
c 30

Причина, по которой ключи не сортируются, заключается в том, что dict() использует хеш-таблицу для их хранения, поэтому у вас может быть только один уникальный ключ и почему у вас могут быть составные ключи, состоящие из хешируемых объектов. Ключи отсортированы по их хешу, более подробное объяснение см. В этот ТАК вопрос

2
Community 23 Май 2017 в 11:52

Если вы хотите указать порядок, вы можете отсортировать ключи следующим образом:

for key in sorted(my_dict.keys()):
    print '{0} {1}'.format(key, my_dict.get(key))

Это производит:

a 10
b 20
c 30
0
hd1 16 Дек 2015 в 07:20

Словарь Python не имеет порядка. Вам нужно отсортировать ключи, если вы хотите перебирать их в определенном порядке.

Например, для итерации лексикографического порядка ключей с помощью sorted:

>>> my_dict = {'a':10, 'c':30, 'b':20}
>>> for key in sorted(my_dict):
...     print key, my_dict[key]
... 
a 10
b 20
c 30
1
falsetru 16 Дек 2015 в 07:21

Ключи словаря отсортированы по их хешу, поэтому вы не можете ожидать какого-либо порядка там.

Если вам нужны ключи заказа, вы должны использовать SortedDict.

Если вам нужно сохранить порядок ключей, вы должны использовать OrderedDict

2
Ali Nikneshan 16 Дек 2015 в 07:24