$ python
Python 2.6.6 (r266:84292, Nov 21 2013, 10:50:32)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import collections
>>> a = collections.OrderedDict({'a':'1','b':'2'})
>>> a
OrderedDict([('a', '1'), ('b', '2')])
>>> for i, (k,v) in enumerate(a.iteritems()):
... print i, k, v
...
0 a 1
1 b 2
некрасиво, если вы спросите меня.
Я не знаю, почему вас интересует индекс. Идея между dict заключается в том, что вы должны быть не осведомлены об индексе. Существует логика для диктата и очередей, чтобы мы были свободны от индексов.
Если вы настаиваете на получении индекса, нет необходимости повторять итерацию дважды.
Давайте посмотрим, что перечисление делает списки:
>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
Обратите внимание на "старт".
Enumerate знает, как управлять списками. Словари хранят данные как список, где-то в животе зверя. Итак, что произойдет, если мы будем использовать перечисление на dict?
>>> for i,k in enumerate(a):
... print i,k
...
0 a
1 b
В этом свете я хотел бы пойти на элегантный:
>>> for i,k in enumerate(a):
... print i,k,a[k]
...
0 a 1
1 b 2
Я чувствую, что «я, (к, v) в» выставляет слишком много внутренней структуры слишком рано. С «для i, k in» мы защищены и когда время приходит к рефактору, нам не нужно прикасаться к тому, как мы зацикливаемся. Нам нужно изменить только то, что мы делаем в цикле. Еще один аспект, о котором нужно заботиться.
Не говоря уже о том, что этот вызов перечисления работает одинаково на любом python после 2.6 :)
https://docs.python.org/2/library/stdtypes.html#dict.iteritems
https://docs.python.org/2/library/functions.html#enumerate
Почему вы рекомендуете использовать 'dict.items()' вместо этого? Он буквально строит новый список. – farukdgn
@farukdgn, В Python 3.x, 'dict.items()' возвращает представление, а не список. И нет никаких «dict.iteritems» в Python 3.x. См. [Dictionary view] (https://docs.python.org/3/glossary.html#term-dictionary-view). – falsetru