2016-03-27 2 views
7

Я знаю, что мы используем enumerate для итерации списка, но я попробовал его в словаре и не дал ошибку.enumerate() для словаря в python

КОД:

enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7} 

for i, j in enumerate(enumm): 
    print(i, j) 

ВЫВОД:

0 0 

1 1 

2 2 

3 4 

4 5 

5 6 

6 7 

Может кто-то объяснить выход?

+1

Зацикливание по диктору печатает ключи, так что вы ожидали? – salparadise

ответ

4
for k,v in dict.iteritems(): 
    print(k,v) 
+0

Это не позволяет мне редактировать 2 символа на этом посту, но OP помечен как для Python 3, поэтому оператор печати должен иметь скобки вокруг k, v. –

+0

@Mr. Меня, ты, исправишь. – roadrunner66

+2

Следует отметить, что он доступен только для python2. dict.iteritems() был удален в python3, см. также https://stackoverflow.com/questions/30418481/error-dict-object-has-no-attribute-iteritems-when-trying-to-use-networkx – gyger

1

Это обязательно должно показаться запутанным. Так вот что происходит. Первое значение перечисления (в этом случае i) возвращает следующее значение индекса, начинающееся с 0, так что 0, 1, 2, 3, ... Оно всегда будет возвращать эти числа независимо от того, что находится в словаре. Второе значение перечисления (в этом случае j) возвращает значения в вашем словаре/enumm (мы называем это словарем в Python). То, что вы действительно хотите сделать, это то, что ответил roadrunner66.

9

Первый столбец вывода - это индекс каждого элемента в enumm, а второй - его ключи. Если вы хотите перебрать свой словарь, то используйте .items():

for k, v in enumm.items(): 
    print(k, v) 

И выход должен выглядеть следующим образом:

0 1 
1 2 
2 3 
4 4 
5 5 
6 6 
7 7 
0
  1. Перебор Python ДИКТ значит перебирать свои ключи именно Точно так же, как с dict.keys()
  2. порядок ключей определяется кодом реализации, и вы не можете ожидать некоторого определенного порядка:

    Ключи и значения повторяются в произвольном порядке, который является неслучайным, варьируется в зависимости от реализации Python и зависит от истории вставки и удаления словаря . Если ключи, значения и элементы просматриваются без повторных изменений в словаре , порядок элементов будет соответствовать непосредственно.

Вот почему вы видите индексы от 0 до 7 в первой колонке. Они производятся от enumerate и всегда в правильном порядке. Далее вы увидите ключи dict от 0 до 7 во второй колонке. Они не отсортированы.

Смежные вопросы