具有常量值类型的Python字典

3 投票
2 回答
1426 浏览
提问于 2025-04-15 23:22

我遇到了一种情况,需要一个非常大的 Python 字典,这个字典占用的内存相当多。不过,因为所有的值都是同一种类型(长整型),而且键也是同样的类型,所以我想我可以用 Python(或者 numpy,没什么太大区别)数组来存储这些值;然后用一个对象来封装需要的接口(输入:x;输出:d[x]),这个对象实际上使用这些数组来存储键和值。

我可以使用一个索引转换对象(输入 --> 索引,范围是 1 到 n,其中 n 是不同值的数量),然后返回 array[index]。我可以详细讲讲如何实现这种索引方法,要求的内存量合理,而且效果还不错。不过,我在想,Python 中是否已经有这样的数据结构对象(或者是从 C/C++ 包装过来的),在任何一个包里(我查过 collections,还有一些谷歌搜索)。

欢迎任何评论,谢谢。

2 个回答

0

你可以试试用 std::map。Boost.Python 提供了一个现成的工具,可以让 std::map 在 Python 中使用。

2

这种任务通常涉及到数据库的使用,因为它需要处理大量特定类型的数据。你可以创建一个简单的表格,并为关键字段建立索引,这样可以更快地访问数据。虽然我没有这方面的经验,但你可以看看标准的 sqlite3 模块。

如果你的关键字段不会随时间变化,你也可以选择把所有数据放在两个经过优化的Python数组里(使用标准的 array 模块)。一个数组存放排序后的关键字段,另一个数组存放对应的值。这样,你就可以通过优化过的 bisect.bisect 函数来快速找到关键字段的位置。

撰写回答