使用python迭代大型字典(超过20亿个条目)

使用python迭代大型字典(超过20亿个条目),python,dictionary,Python,Dictionary,我对python非常陌生,我想循环浏览一本包含大约20亿条目的字典。使用: for key,value in edge_dict.items(): 然而,我得到了内存异常,因为它似乎试图加载整个东西,然后循环通过它们。我对一些琐碎的事情有这个问题,比如: for i in range (2000000000) 但是我可以很容易地用它们来代替 while (i < 2000000000): i++ while(i

我对python非常陌生,我想循环浏览一本包含大约20亿条目的字典。使用:

for key,value in edge_dict.items():
然而,我得到了内存异常,因为它似乎试图加载整个东西,然后循环通过它们。我对一些琐碎的事情有这个问题,比如:

for i in range (2000000000)
但是我可以很容易地用它们来代替

while (i < 2000000000):
    i++ 
while(i<2000000000):
i++
这就解决了问题。然而,对于字典,我不知道如何在不使用for-in迭代器的情况下遍历键。(请注意,键是字符串,值是整数)

我想这就是你想要的

同样如果

for i in range (2000000000)
导致内存错误。您可以使用迭代器

for i in xrange(2000000000)

迭代器(和/或生成器)一次只加载一个项,并在迭代时使用。。。这修复了内存中的大型列表可能存在的许多问题

注意,这是Python 2.x独有的。在Python3.x中,
dict.items
range
都返回生成器,因此不需要
iteritems
xrange
(它们实际上根本不存在),因为它更适合这种格式:在如此大的字典上迭代可能是一个糟糕设计的标志。看看在您的情况下,是否可以从源代码处过滤数据,无论数据是来自数据库查询还是其他什么。看见
for i in xrange(2000000000)