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'
答案 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__()
,但请记住:
您希望以下内容返回?
>>> 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))
事情是slightly different,dict.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()
您有iterkeys
,iteritems
和itervalues
。选择一个。