我已经看到其他 Python 程序员将集合模块中的 defaultdict 用于以下用例:
from collections import defaultdict
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
def main():
d = defaultdict(list)
for k, v in s:
d[k].append(v)
我通常通过使用 setdefault 来解决这个问题:
def main():
d = {}
for k, v in s:
d.setdefault(k, []).append(v)
事实上,文档确实声称使用 defaultdict 更快,但我在测试自己时看到了相反的情况:
$ python -mtimeit -s "from withsetdefault import main; s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)];" "main()"
100000 loops, best of 3: 4.51 usec per loop
$ python -mtimeit -s "from withdefaultdict import main; s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)];" "main()"
100000 loops, best of 3: 5.38 usec per loop
我设置测试的方式有问题吗?
作为参考,我使用的是 Python 2.7.3 [GCC 4.2.1 (Apple Inc. build 5666)