私は、他の 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)] を使用しています。