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__(),但请记住:
您希望以下内容返回什么?
>>> 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)
事情是略有不同的,则返回的对象的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)