問題描述
dict.setdefault()
和collection.defaultdict
誰更快?
官方文檔表示collection.defaultdict
會更快,做個實驗試一下
解決方案
隨機生成1千萬個數,並使用Jupyter Notebook的魔法命令%%timeit
計時
import random
from collections import defaultdict
s = []
i = 0
while i < 10000000:
i += 1
a = (random.randint(0, 9), random.randint(0, 9))
s.append(a)
dict.setdefault()
%%timeit
d = {}
for k, v in s:
d.setdefault(k, []).append(v)
# 2.15 s ± 5.47 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
collection.defaultdict
%%timeit
d = defaultdict(list)
for k, v in s:
d[k].append(v)
# 1.25 s ± 5.42 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
手動添加
%%timeit
d = {}
for k, v in s:
if k not in d:
d[k] = []
d[k].append(v)
# 1.56 s ± 36.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
結論
setdefault | defaultdict | 手動添加 |
---|---|---|
2.15 s | 1.25 s | 1.56 s |
collection.defaultdict
快0.9s,約42%