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'))]