【发布时间】:2014-09-26 07:07:59
【问题描述】:
我使用defaultdict 来存储数百万个短语,所以我的数据结构看起来像mydict['string'] = set(['other', 'strings'])。它似乎适用于较小的集合,但是当我按下任何超过 1000 万个键时,我的程序就会崩溃,并显示 Process killed 的有用消息。我知道defaultdicts 内存很重,但是是否有使用defaultdicts 进行存储的优化方法,或者我是否必须查看其他数据结构,例如 numpy 数组?
谢谢
【问题讨论】:
-
numpy 数组而不是 defaultdict?而不是设置?我不知道这对于第一种情况如何工作,或者在第二种情况下你会如何做得更好——对于类似集合的操作,集合将比 numpy 数组快得多。
-
无论你获得多少内存减少,当你达到 2000 万个键(或 30M 等)时,都会再次爆炸。将所有内容都保存在核心中确实很方便,但您可能会超出核心。如果您将存储移动到适当的 DBMS,您或您的继任者将来会减少对您的恨意。
-
感谢您的回复,我意识到我想回复如何处理这个问题。这个大数据集是用来查找较小数据集的,我可以颠倒逻辑。否则 DBMS 会是更好的解决方案
-
也许可以尝试一下(我不认为这些在标准库中,但是有很多可用的实现)?但前提是您的字典键之间存在显着重叠。集合的开销可能类似于字典 - 如果您的成员很少,可以尝试用元组替换它们。
-
只需使用 SQLite 数据库。它会为你省去很多痛苦。
标签: python numpy defaultdict large-data