Python中加载字典的最有效方法是什么?

3
我有一个Python字典,大约有1000个条目。一个脚本会被反复调用,需要解析一个字符串并查看其中是否有匹配的键。如果有匹配的键,它将根据键和值采取某些操作。
以下哪种方法更快?
1)将字典存储在MySQL数据库中,然后每次调用脚本时读取数据库?
2)将字典存储在Python脚本中,并每次导入它? (例如,创建一个只包含字典初始化的文件)
3)将字典存储在文本文件中,并每次导入它? (使用纯文本文件或使用cpickle序列化数据文件)
只是想寻找最佳实践建议。

一个包含1000条数据的字典并不算大。如果你担心“加载时间”的话,为什么不将你的字典放在一个Python模块中,并在应用程序开始时导入它呢?这样做后,它会被编译成PYC文件,在第一次运行后就会变得非常快速,对吧? - K. Brafford
正如 K. 所说,你的字典很小,所以最好将其加载到 pyc 中的内存中。然而,对于实际的大型字典,应该使用像 BDB 或 MetaKit 这样的数据库,而不是关系数据库。 - Nick Bastin
3个回答

1
你可以创建一个 .py 的 Python 文件,将字典赋值给一个名称。保存文件。将文件编译为 .pyc,然后在主 Python 脚本需要时作为模块加载。
这样做的好处是保持字典的可读文本表示以进行维护/调试,加载 .pyc 文件的速度快,并且所有内容都符合标准 Python 的简单性。

1
文件在第一次被导入时将自动编译为.pyc文件。 - aaronasterling

0

我认为将其存储为Python文件中的字典,并在每个需要它的模块中导入,是正确的方法。您能否以编程方式构建它?无论哪种方式,该文件在程序执行期间只会被实际导入一次,因此除非您知道在开始时仅加载一次不可接受,否则这不应该成为大问题。

shelve可能是另一种选择。如果您想选择选项(3),那么这可能是做法。它是基于anydbm模块构建的。这可能会更慢,但可以避免一次性将整个内容放入内存中。

在我看来,1)和3)都不适用。进行数据库查询的开销很可能会显著减慢访问速度。选项2)将使所有内容都变成简单的字典查找。


0

为了测试目的,您也可以像这样加载一个包含任何内容(在本例中为整数)的字典:

    D = dict(zip(range(100),range(100)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接