我碰到了一个需要一个大(=巨大的)python字典的情况,这个字典变得非常耗费内存。 但是,由于所有的值都是单一类型(长) - 以及键,我想我可以使用python(或numpy,并不重要)数组的值;并使用一个实际使用这些数组作为键和值存储的对象包装所需的接口(在:x; out:d [x]中)。
我可以使用索引转换对象(输入 - >索引,1..n,其中n是不同的值计数器),并返回数组[index]。我可以详细说明一些如何实现具有合理内存要求的索引方法的技术,它可以工作甚至相当不错。 但是,我想知道是否存在这样的数据结构对象(在python中,或从C / ++包装到python),在任何包中(我检查了集合,以及一些谷歌搜索)。
欢迎任何评论,谢谢。
答案 0 :(得分:2)
这种任务是典型的数据库类型访问(给定类型的列中的大量数据)。您将创建一个带索引键的简单表,以便快速访问。我没有使用它的经验,但您可能想查看标准的sqlite3模块。
如果您的密钥不随时间变化,您可以将所有数据放在两个Python内存优化的数组中(标准array
模块);一个数组包含排序的键,另一个数组包含相应的值。然后,您可以通过优化的bisect.bisect
函数找到关键索引。
答案 1 :(得分:0)
您可以尝试使用std :: map。 Boost.Python为开箱即用的std :: map提供了一个Python包装。