如何使用timeit比较dict lookup和set lookup

How to use timeit to compare dict lookup and set lookup

这个我真的不懂

import timeit
d = {'a':0,
     'b':0,
     'c':0}
s = {'a','b','c'}

t = timeit.Timer('a' in (d))
t.timeit()

字典键查找与集合成员查找一样快吗?

让我们使用一个灵活的协议:使用(固定的)随机值创建一个包含 20000 个成员的大字典(如果某些值重复,则可能少于 20000 个值),从键创建一个集合,然后测试 in 两者。

import timeit

for i in ['the_dict','the_set']:
    print("{} {}".format(i,timeit.timeit(stmt="'a' in "+i,setup="import random; random.seed(0); the_dict = {random.randint(0,100000000):0 for _ in range(20000)}; the_set = set(the_dict)")))

虽然我不会仓促下结论:对于 2 次不同的运行:

>>> 
the_dict 0.04250915015789406
the_set 0.03894365848696617
>>> 
*** Console de processus distant Réinitialisée *** 
>>> 
the_dict 0.03786818274290301
the_set 0.04610909810692078
>>> 

此时的时间差异可能是非常低级的(缓存hit/miss),与python无关。两者都使用哈希。如果 dict 设计得比 sets 快,就没有人会使用 sets...