【问题标题】:Python dict.update vs initializing completely in startingPython dict.update vs 在开始时完全初始化
【发布时间】:2020-12-25 01:16:53
【问题描述】:

我必须定义一个包含大约 50,000 个键和值 -1 的字典。每个键都根据 if 条件进行更新。此外,并非所有密钥都会更新。

一种方法是初始化完整的dict,然后使用for循环来更新值。 另一种方法是初始化一个空字典,然后仅针对更新的值更新它。

我的问题是初始化一个非常大的字典或即时更新它是否需要相同的时间/计算量。更新太贵了吗?

【问题讨论】:

  • 您可以尝试这两种方法并自己计时。如果你问“如何为 Python 函数计时”,之前有人问过并回答过
  • from time import time - 然后是start = time(); ... logic here ...; print(time() - start)
  • 您可以使用fromkeys 将整个字典初始化为值-1。要获得小代码 sn-ps 的准确计时,您可以使用timeit,因为它通过多次运行并在没有垃圾收集的情况下运行来产生更准确的时间。

标签: python python-3.x performance dictionary memory-management


【解决方案1】:

您可以使用 defaultdict 在缺少键的情况下返回默认值。
注意:defaultdict 需要一个callable 进行初始化,这就是我使用这个lambda 函数的原因,
它只是返回初始化值。

from collections import defaultdict
def_dict = defaultdict(lambda:-1)
def_dict[500] = 2

print(def_dict[0])
print(def_dict[500])

因此,与其迭代所有 50.000 个键来初始化它们,您可以只迭代所需的子集,而不必担心其余部分。

输出:

-1
2

【讨论】:

    猜你喜欢
    • 2018-08-05
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    相关资源
    最近更新 更多