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 對象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章