Enumerate() для словаря в python

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

CODE:

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

Первый столбец вывода - это индекс каждого элемента в 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

Ответ 2

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

В обычном случае вы перечисляете ключи словаря:

example_dict = {1:'a', 2:'b', 3:'c', 4:'d'}

for i, k in enumerate(example_dict):
    print(i, k)

Какие выводы:

0 1
1 2
2 3
3 4

Но если вы хотите перечислить как ключи, так и значения, это так:

for i, (k, v) in enumerate(example_dict.items()):
    print(i, k, v)

Какие выводы:

0 1 a
1 2 b
2 3 c
3 4 d

Ответ 3

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

Ответ 4

Просто подумал, что я добавил бы, если вы хотите перечислить по индексу, ключу и значениям словаря, ваш цикл for должен выглядеть так:

for index, (key, value) in enumerate(your_dict.items()):
    print(index, key, value)

Ответ 5

enumerate() при работе над списком фактически дает индекс и значение элементов внутри списка. Например:

l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for i, j in enumerate(list):
    print(i, j)

дает

0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9

где первый столбец обозначает индекс элемента, а второй столбец обозначает сами элементы.

В словаре

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

где в первом столбце указан индекс пар key:value, а второй столбец обозначает keys словаря enumm.

Итак, если вы хотите, чтобы первый столбец был keys и вторыми столбцами как values, лучше попробуйте dict.iteritems() (Python 2) или dict.items() (Python 3)

for i, j in enumm.items():
    print(i, j)

Выход

0 1
1 2
2 3
4 4
5 5
6 6
7 7

Вуаля

Ответ 6

Поскольку вы используете enumerate следовательно, ваш i на самом деле является индексом ключа, а не самого ключа.

Таким образом, вы получаете 3 в первом столбце строки 3 4 даже если нет ключа 3.

enumerate перебирает структуру данных (будь то список или словарь), а также указывает номер текущей итерации.

Следовательно, столбцы здесь - это номер итерации, за которым следует ключ в словаре enum

Другие решения уже показали, как перебирать пару ключ/значение, поэтому я не буду повторять то же самое в моей.

Ответ 7

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

Ответ 8

python3:

Одно из решений:

enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7}
for i, k in enumerate(enumm):
    print("{}) d.key={}, d.value={}".format(i, k, enumm[k]))

Output:
0) enumm.key=0, enumm.value=1
1) enumm.key=1, enumm.value=2
2) enumm.key=2, enumm.value=3
3) enumm.key=4, enumm.value=4
4) enumm.key=5, enumm.value=5
5) enumm.key=6, enumm.value=6
6) enumm.key=7, enumm.value=7

Еще один пример:

d = {1 : {'a': 1, 'b' : 2, 'c' : 3},
     2 : {'a': 10, 'b' : 20, 'c' : 30}
    }    
for i, k in enumerate(d):
        print("{}) key={}, value={}".format(i, k, d[k])

Output:    
    0) key=1, value={'a': 1, 'b': 2, 'c': 3}
    1) key=2, value={'a': 10, 'b': 20, 'c': 30}

Ответ 9

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

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

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

Ответ 10

d = {0: 'zero', '0': 'ZERO', 1: 'one', '1': 'ONE'}

print("List of enumerated d= ", list(enumerate(d.items())))

выход:

List of enumerated d=  [(0, (0, 'zero')), (1, ('0', 'ZERO')), (2, (1, 'one')), (3, ('1', 'ONE'))]