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

TIM*_*MEX 4 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)
Run Code Online (Sandbox Code Playgroud)

我收到的错误是:

AttributeError: 'dict' object has no attribute 'iter'
Run Code Online (Sandbox Code Playgroud)

Joh*_*web 16

考虑以下因素dict:

>>> d
{'a': 1, 'c': 3, 'b': 2}
Run Code Online (Sandbox Code Playgroud)

您可以像这样迭代键:

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

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

显式优于隐式.

Python 2. x

您希望以下内容返回什么?

>>> tuple(d.iter())
Run Code Online (Sandbox Code Playgroud)

太暧昧了,也许吧?

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

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

如果你想迭代密钥怎么办?

>>> tuple(d.iterkeys())
('a', 'c', 'b')
Run Code Online (Sandbox Code Playgroud)

太好了!和价值观

>>> tuple(d.itervalues())
(1, 3, 2)
Run Code Online (Sandbox Code Playgroud)

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

>>> tuple(d.iteritems())
(('a', 1), ('c', 3), ('b', 2))
Run Code Online (Sandbox Code Playgroud)

Python 3. x

事情是略有不同的,则返回的对象的dict.keys(),dict.values()并且dict.items()视图对象.但是,这些可以以相同的方式使用:

>>> tuple(d.keys())
('a', 'c', 'b')
>>> tuple(d.values())
(1, 3, 2)
>>> tuple(d.items())
(('a', 1), ('c', 3), ('b', 2))
Run Code Online (Sandbox Code Playgroud)