我了解到可以有效地遍历字典而无需重新创建整个字典:
for k,v in iter(d.items()):
print("k={} v={}".format(k,v)) # or do whatever. This is just placeholder code.
问:python3.5.4是否可以通过某种方式直接给我v值,作为指向它的指针或引用,而不是将其值复制到我的for循环中的局部变量v中?如果v是一个大数组,这可以为我提供帮助,因为每个v是一个numpy数组,在我的应用程序中包含10 ^ 5或10 ^ 6个元素,甚至更多,并且我的迭代器循环具有数百万次迭代。在其他语言中,我使用了引用和指针,但据我所知,我在python3.5.4中还没有使用它们。
感谢您分享专业知识。
更新:
这里是一些numpy python代码,我用来证明v不是本地副本,而是对numpy数组的引用。这对我来说是个好消息。这证实了获胜者的回答。感谢获胜者,以及所有其他评论者都声称相同。我对此感到高兴!再次感谢所有参加的人。
import numpy as np
x = np.array([8,6,7,5,3,0,9])
d = {}
d["mouse"] = x
for k,v in iter(d.items()):
v[1] = 2
print(d)
词典现在在一个数组位置包含一个新值。这意味着v [1] = 2行在原始数组上而不是在本地复制上运行。
答案 0 :(得分:5)
for k, v in d.items(): ...
执行两次分配。在每次迭代中,将k
分配给键,并将v
分配给在d.items()
上从迭代器产生的下一个(键,值)元组的值。
工作分配从不复制数据,所以
python3.5.4是否有某种方式可以直接给我v值,作为指向它的指针或引用,而不是在我的for循环中将值复制到局部变量v
已经在发生。
此外,在Python3.5中,dict.items
的返回值是对字典中数据非常有效的视图。总之,您已经拥有了所需的一切。