我有一些大约1.5GB的数据。现在我想将这些信息存储在python中的一个大字典中。但是,它的成本远大于1.5GB,可能是10倍。机器没有那么多内存。有没有办法使用更少的内存将这些数据放入dict结构?键和值都是整数。
最诚挚的问候,
答案 0 :(得分:1)
使用快速数据库将键值对存储到磁盘,并允许智能检索和索引,例如sqlite
。
答案 1 :(得分:1)
您应该尝试使用数据库,这样就不必将所有数据存储在内存中。
Berkeley数据库非常适合您的使用,因为它只存储键值对。它是数据库形式的“字典”!
代码看起来像:
from bsddb3 import db
dbdict = DB()
dbdict.open("your database", None, db.DB_HASH, db.DB_CREATE)
dbdict[3]=2 #works just like a dict!
答案 2 :(得分:0)
如果键是整数,那么,根据键的范围,您可以使用数组http://docs.python.org/2/library/array.html而不是字典。你的密钥成为数组中的索引,就是这样。这比创建字典的内存效率更高。
如果没有足够的RAM来将所有数据都放入数组中,那么可以使用像sqlite或Berkeley DB这样的东西,实际上有一个字典存档。当然,它会慢得多。
答案 3 :(得分:0)
使用pickle对象将数据存储在字典中。请参阅此链接以使用pickle http://wiki.python.org/moin/UsingPickle
答案 4 :(得分:0)
由于您的索引和数据是整数,您可以将数据保存在文件中并像访问数组那样访问它,但只有您正在处理的页面将在RAM中,其他页面将保留在磁盘上
请参阅http://docs.python.org/2/library/mmap.html
mmap是基于字节的,这意味着其中的索引将类似于架构上的索引* sizeof(int),并且您需要读取sizeof(int)字节而不是只读取一个字节,并使用struct模块(http://docs.python.org/2/library/struct.html)将其转换为python整数。
如果所有数据都适合RAM,此解决方案比使用数组慢一点,如果系统开始分页,则此解决方案将比使用普通数组更快。