我有一个字典 A 和一个可能的条目 foo。我知道 A[foo] 应该等于 x,但我不知道 A[foo] 是否已经定义。在任何情况下,如果 A[foo] 已被定义,则意味着它已经具有正确的值。
执行速度更快:
if foo not in A.keys():
A[foo]=x
或者简单地更新
A[foo]=x
因为当计算机找到 foo 条目时,它也可以更新它。如果不是,我将不得不调用哈希表两次?
谢谢。
最佳答案
只需将项目添加到字典中而不检查它们是否存在。我使用 3 种不同的方法将 100,000 个项目添加到字典中,并使用 timeit 模块对其进行计时。
如果 k 不在 d 中:d[k] = v
d.setdefault(k, v)
d[k] = v
选项 3 是最快的,但不是很多。
[ 实际上,我也试过 if k not in d.keys(): d[k] = v
,但是速度慢了 300 倍(每次迭代都构建了一个键列表并执行线性搜索)。它让我的测试变得如此缓慢,以至于我把它留在了这里。 ]
这是我的代码:
import timeit
setup = """
import random
random.seed(0)
item_count = 100000
# divide key range by 5 to ensure lots of duplicates
items = [(random.randint(0, item_count/5), 0) for i in xrange(item_count)]
"""
in_dict = """
d = {}
for k, v in items:
if k not in d:
d[k] = v
"""
set_default = """
d = {}
for k, v in items:
d.setdefault(k, v)
"""
straight_add = """
d = {}
for k, v in items:
d[k] = v
"""
print 'in_dict ', timeit.Timer(in_dict, setup).timeit(1000)
print 'set_default ', timeit.Timer(set_default, setup).timeit(1000)
print 'straight_add ', timeit.Timer(straight_add, setup).timeit(1000)
结果:
in_dict 13.090878085
set_default 21.1309413091
straight_add 11.4781760635
注意: 这一切都毫无意义。我们每天都会收到很多关于在 Python 中执行 x 或 y 的最快方法的问题。在大多数情况下,很明显问题是在遇到任何性能问题之前提出的。我的建议?专注于编写您可以编写的最清晰的程序,如果它太慢,请对其进行概要分析并在需要的地方进行优化。根据我的经验,我几乎从来没有去分析和优化步骤。从问题的描述来看,字典存储似乎不是您程序中的主要瓶颈。
关于python - 在 python 中更新字典的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4156392/