Python setdefault和defaultdict谁更快?

问题描述

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%




参考文献

  1. defaultdict 对象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章