2010-11-19 49 views
1

我有我操纵的巨大字典。超过1000万字被散列。它太慢了,有一段时间内存不足。如何处理Python的内存不足

有没有更好的方法来处理这些庞大的数据结构?

+0

你为什么不使用'shelve'? – 2010-11-19 10:57:28

回答

9

是的。它被称为数据库。由于字典为你工作(除了内存问题),我会假设一个SQLite数据库可以为你工作。你可以很容易地使用sqlite3,它有很好的文档记录。

当然,如果您可以将值表示为json之类的值或者愿意信任本地文件中的pickle数据,那么这只是一个很好的解决方案。也许你应该发布关于字典价值的细节。 (我假设键是单词,如果不是,请纠正我)

您可能还想看看不生成整个字典,只处理它的块。这在你的特定用例中可能并不实用(通常不适用于那些不幸使用字典的东西),但如果你能想到一种方法,重新设计你的算法以允许它可能是值得的。

+0

在这种情况下,一个完整数据库的可行替代方案可能是内置的“shelve”模块。它提供了一个很好的Python字典式界面,所以使用它的转换应该相对容易。 – martineau 2010-11-19 12:01:45

+0

@martineau,这是一种可能性。我的思路是,搁置可能会比sqlite慢很多,但我可能错了,因为我没有对它进行任何分析。 – aaronasterling 2010-11-19 12:04:58

1

我不确定你说的话是什么,但我想他们是相当大的结构,如果内存是一个问题。

我确实通过从Python 32位切换到Python 64位解决了Python MemoryError问题。事实上,一些Python结构对于4 GB地址空间已变得很大。您可能想尝试一下,作为解决您的问题的简单解决方案。