Я знаю, что мы используем enumerate
для итерации списка, но я попробовал это в словаре, и он не дал ошибки.
КОД:
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
Может кто-нибудь объяснить вывод?
python
python-3.x
dictionary
enumerate
Адитья Кришн
источник
источник
for i, j in enumerate(enumm)
получаетi
приращение на каждой итерации иj
захватывает обычный элемент изenumerate
аргумента функции, который в данном случае является словарем. Перебор dicts, по сути, перебирает его ключи.Ответы:
В дополнение к уже предоставленным ответам в 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
источник
dictionary.items()
(без перечисления), чтобы получить объект представления с парами ключ-значение в виде списка кортежей.Первый столбец вывода - это индекс каждого элемента,
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
источник
Просто подумал, что добавлю, если вы хотите перечислить индекс, ключ и значения словаря, ваш цикл for должен выглядеть так:
for index, (key, value) in enumerate(your_dict.items()): print(index, key, value)
источник
idx, (k, v) in enumerate(d.items()):
dict1={'a':1, 'b':'banana'}
Чтобы перечислить словарь в Python 2.x:
for k,v in dict1.iteritems(): print k,v
В Python 3.x используйте:
for k,v in dict1.items(): print(k,v) # a 1 # b banana
Наконец, как указывали другие, если вам нужен работающий индекс, вы тоже можете его:
for i in enumerate(dict1.items()): print(i) # (0, ('a', 1)) # (1, ('b', 'banana'))
Но это лишает смысла словарь (карта, ассоциативный массив) , который является эффективной структурой данных для поиска в стиле телефонной книги. Упорядочивание словаря может быть связано с реализацией, и на него нельзя полагаться. Если вам нужен порядок, используйте вместо него OrderedDict .
источник
Поскольку вы используете,
enumerate
следовательно, вашi
фактически индекс ключа, а не сам ключ.Итак, вы попадаете
3
в первый столбец строки,3 4
хотя ключа нет3
.enumerate
выполняет итерацию по структуре данных (будь то список или словарь), одновременно предоставляя текущий номер итерации.Следовательно, столбцы здесь - это номер итерации, за которым следует ключ в словаре.
enum
Другие решения уже показали, как перебирать пару ключей и значений, поэтому я не буду повторять то же самое в своем.
источник
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
Вуаля
источник
Это наверняка может сбивать с толку. Так вот что происходит. Первое значение enumerate (в данном случае i) возвращает следующее значение индекса, начиная с 0, поэтому 0, 1, 2, 3, ... Он всегда будет возвращать эти числа независимо от того, что находится в словаре. Второе значение enumerate (в данном случае j) возвращает значения в вашем словаре / enumm (мы называем это словарем в Python). Что вы действительно хотите сделать, так это то, чем ответил roadrunner66.
источник
dict.keys()
Вот почему вы видите индексы от 0 до 7 в первом столбце. Они производятся
enumerate
и всегда находятся в правильном порядке. Далее вы видите ключи dict от 0 до 7 во втором столбце. Они не отсортированы.источник
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}
источник
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'))]
источник
Возможно, вам будет полезно включить индекс внутри ключа:
d = {'a': 1, 'b': 2} d = {(i, k): v for i, (k, v) in enumerate(d.items())}
Вывод:
{(0, 'a'): True, (1, 'b'): False}
источник