什么是迭代OrderedDict的最pythonic方式

Ask*_*nto 27 python dictionary loops python-2.7

我有一个OrderedDict,在循环中我想得到索引,键和值.这肯定可以通过多种方式完成,即

a = collections.OrderedDict({…})
for i,b,c in zip(range(len(a)), a.iterkeys(), a.itervalues()):
  …
Run Code Online (Sandbox Code Playgroud)

但我想避免范围(len(a))并将a.iterkeys(),a.itervalues()缩短为类似a.iteritems()的东西.使用枚举和iteritems,可以将其改写为

for i,d in enumerate(a.iteritems()):
  b,c = d
Run Code Online (Sandbox Code Playgroud)

但它需要在循环体内解包.有没有办法解析for语句或者更优雅的迭代方式?

fal*_*tru 53

您可以在for语句中使用元组解包:

for i, (key, value) in enumerate(a.iteritems()):
    # Do something with i, key, value
Run Code Online (Sandbox Code Playgroud)
>>> d = {'a': 'b'}
>>> for i, (key, value) in enumerate(d.iteritems()):
...     print i, key, value
... 
0 a b
Run Code Online (Sandbox Code Playgroud)

边注:

在Python 3.x中,使用dict.items()返回可迭代的字典视图.

>>> for i, (key, value) in enumerate(d.items()):
...     print(i, key, value)
Run Code Online (Sandbox Code Playgroud)

  • @farukdgn,在Python 3.x中,`dict.items()`返回一个视图,而不是一个列表。而且在Python 3.x中没有`dict.iteritems`。参见[字典视图](https://docs.python.org/3/glossary.html#term-dictionary-view)。 (3认同)