为什么Python的dict没有.iter()?

时间:2011-07-15 11:25:05

标签: python

def complicated_dot(v, w):
        dot = 0
        for (v_i, w_i) in zip(v, w):
            for x in v_i.iter():
                if x in w_i:
                    dot += v_i[x] + w_i[x]
        return float(dot)

我收到的错误是:

AttributeError: 'dict' object has no attribute 'iter'

3 个答案:

答案 0 :(得分:16)

考虑以下dict

>>> d
{'a': 1, 'c': 3, 'b': 2}

您可以像这样迭代键:

>>> for k in d:
...     print(k, d[k])
... 
('a', 1)
('c', 3)
('b', 2)

这隐式调用特殊方法__iter__(),但请记住:

  

Explicit is better than implicit.

Python 2. x

您希望以下内容返回?

>>> tuple(d.iter())

太暧昧了,也许?

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'dict' object has no attribute 'iter'

这似乎是一种非常合理的方法。

如果您只想迭代,该怎么办?

>>> tuple(d.iterkeys())
('a', 'c', 'b')

尼斯!和

>>> tuple(d.itervalues())
(1, 3, 2)

键和值如何成对(元组)?

>>> tuple(d.iteritems())
(('a', 1), ('c', 3), ('b', 2))

Python 3. x

事情是slightly differentdict.keys()dict.values()dict.items()返回的对象是view objects。但是,这些可以大致相同的方式使用:

>>> tuple(d.keys())
('a', 'c', 'b')
>>> tuple(d.values())
(1, 3, 2)
>>> tuple(d.items())
(('a', 1), ('c', 3), ('b', 2))

答案 1 :(得分:13)

It has iter。但你可以写

for x in v_i:

答案 2 :(得分:8)

v_i.itervalues()

您有iterkeysiteritemsitervalues。选择一个。