【问题标题】:What's the most efficient way to load a dictionary in Python?在 Python 中加载字典的最有效方法是什么?
【发布时间】:2010-11-27 05:58:59
【问题描述】:

我有大约 1000 个条目的 Python 字典。将重复调用一个脚本,该脚本将要解析字符串并查看字符串中是否有任何键匹配。如果他们这样做了,它将根据键和值采取一些行动。

哪一个更快?

1) 将字典存储在MySQL数据库中,然后每次调用脚本时读取数据库?

2) 将字典存储在 Python 脚本中并每次都导入? (例如,制作一个只包含字典初始化的文件)

3) 将字典存储在文本文件中,每次都导入? (平面文本文件或pickle序列化数据文件,使用cpickle)

只是在这里寻找最佳实践。

【问题讨论】:

  • 1000 个词条的字典并没有那么大。如果您担心“加载时间”,为什么不将字典放入 python 模块并在应用程序开始时导入一次?它会被编译成 PYC 文件,并且在你第一次运行后又好又快,对吧?
  • 正如 K. 所说,您的字典很小,因此您可能应该将其加载到 pyc 中的内存中。但是,对于实际的大型词典,您应该使用 BDB 或 MetaKit 等数据库,而不是关系数据库。

标签: python database dictionary pickle


【解决方案1】:

您可以创建一个 .py Python 文件,它只是将字典分配给一个名称。保存文件。将文件编译为 .pyc,然后在主 Python 脚本需要时将其作为模块加载。

您将获得以下优势:保持 dict 的可读文本表示以进行维护/调试、加载 .pyc 文件的速度以及所有这些都是标准 Python 的简单性。

【讨论】:

  • 文件第一次导入时会自动编译成.pyc
【解决方案2】:

我认为将它作为字典存储在 python 文件中并导入到需要它的每个模块中是可行的方法。你能以编程方式构建它吗?无论哪种方式,该文件实际上只会在每次程序执行时被导入一次,因此它应该没什么大不了的,除非您知道由于某种原因在开始时加载一次是不可接受的。

shelve 可能是另一种方式。如果您想使用选项 (3),这可能就是这样做的方法。它建立在 anydbm 模块上。这可能会更慢,但可以避免一次将整个内容都存储在内存中。

在我看来,1) 和 3) 都是正确的。进行数据库查询的开销很可能会大大降低访问速度。选项 2) 将使这一切都成为一个简单的 dict 查找。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-14
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      相关资源
      最近更新 更多