【发布时间】:2010-11-19 17:01:33
【问题描述】:
我有大量的字典供我操作。超过 1000 万个单词被散列。它太慢了,有时它会耗尽内存。
有没有更好的方法来处理这些庞大的数据结构?
【问题讨论】:
-
你为什么不用
shelve?
我有大量的字典供我操作。超过 1000 万个单词被散列。它太慢了,有时它会耗尽内存。
有没有更好的方法来处理这些庞大的数据结构?
【问题讨论】:
shelve?
是的。它被称为数据库。由于字典对您有用(除了内存问题),我认为 sqlite 数据库对您来说可以正常工作。你可以很容易地使用sqlite3,它有很好的文档记录。
当然,如果您可以将值表示为 json 之类的值,或者愿意信任来自本地文件的腌制数据,这将是一个很好的解决方案。也许您应该在字典的值中发布有关您所拥有内容的详细信息。 (我假设键是单词,如果不是请纠正我)
您可能还想查看不生成整个字典而只处理它的块。这在您的特定用例中可能不实用(不幸的是,它通常不是用于字典的那种东西)但是如果您能想到一种方法,重新设计您的算法以允许它可能是值得的。
【讨论】:
shelve 模块。它提供了一个不错的 Python 类字典接口,所以使用它转换 ro 应该相对容易。
我不确定你的话是什么意思,但我想它们是相当大的结构,如果记忆是一个问题的话。
我曾经通过从 Python 32 位切换到 Python 64 位解决了 Python MemoryError 问题。事实上,一些 Python 结构对于 4 GB 地址空间来说已经变得太大了。您可能想尝试一下,作为解决问题的简单潜在解决方案。
【讨论】: