0

我有一些大约 1.5GB 的数据。现在我想将这些信息存储到 python 中的一个大字典中。但是,它的成本远大于 1.5GB,可能是 10 倍。机器没有那么多内存。有什么方法可以使用更少的内存将这些数据放入 dict 结构中?键和值都是整数。

此致,

4

5 回答 5

1

使用将键值对存储到磁盘并允许智能检索和索引的快速数据库,例如sqlite.

于 2012-11-22T14:06:53.880 回答
1

您应该尝试使用数据库,这样您就不必将所有数据存储在内存中。

伯克利数据库非常适合您使用,因为它只存储键值对。它是数据库形式的“字典”!

代码看起来像:

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!

以下是绑定:Oracle Berkeley DB 的 Python“绑定”

于 2012-11-22T14:07:49.187 回答
0

由于您的索引和数据是整数,您可以将数据保存在文件中并像访问数组一样访问它,但只有您正在处理的页面将在 RAM 中,其他页面将保留在磁盘上。

http://docs.python.org/2/library/mmap.html

mmap 是基于字节的,这意味着其中的索引将类似于您的体系结构上的 index*sizeof(int) ,您将需要读取 sizeof(int) 字节而不是仅一个字节,并使用 struct 模块(http: //docs.python.org/2/library/struct.html)将其转换为python整数。

如果所有数据都适合 RAM,则此解决方案比使用数组要慢一些,如果您的系统开始分页,则此解决方案将比使用普通数组更快。

于 2012-11-22T14:52:57.783 回答
0

使用 pickle 对象将数据存储在字典中。请参阅此链接以使用泡菜http://wiki.python.org/moin/UsingPickle

于 2012-11-22T14:21:33.363 回答
0

如果键是整数,则根据键的范围,您可以使用数组http://docs.python.org/2/library/array.html而不是字典。您的键成为数组中的索引,仅此而已。这将比创建字典更节省内存。

如果您没有足够的 RAM 将所有数据放入一个数组中,那么可以使用 sqlite 或 Berkeley DB 之类的东西来有效地保存字典。当然,它会慢很多。

于 2012-11-22T14:09:33.140 回答