$ 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 之间的想法是你要对索引一无所知。
dict 和 queues 背后有很多逻辑,这样我们就可以摆脱索引了。
如果您坚持获取索引,则无需迭代两次。
让我们看看 enumerate 对列表做了什么:
>>> 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 知道如何管理列表。字典将数据存储为列表,位于野兽腹部的某个地方。那么如果我们在字典上使用 enumerate 会发生什么?
>>> 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
我觉得“for i, (k,v) in”太快暴露了太多的内部结构。
有了“for i,k in”,我们就受到了保护,当需要重构时,我们不需要触及循环的方式。我们只需要改变我们在循环中所做的事情。少一个方面需要照顾。
更不用说这个枚举调用在 2.6 之后的任何 python 中都是一样的 :)
https://docs.python.org/2/library/stdtypes.html#dict.iteritems
https://docs.python.org/2/library/functions.html#enumerate