from random import shuffle
from timeit import timeit
from collections import defaultdict, Counter
def dict1():
d = {}
for num in nums:
if num in d:
d[num] += 1
else:
d[num] = 1
def dict2():
d = {}
for num in nums:
d[num] = d.get(num, 0) + 1
def dict3():
class MyDict(dict):
def __missing__(self, key):
return 0
d = MyDict()
for num in nums:
d[num] += 1
def defaultdict1():
d = defaultdict(int)
for num in nums:
d[num] += 1
def Counter1():
d = Counter()
for num in nums:
d[num] += 1
def Counter2():
d = Counter(nums)
nums = range(1000) * 1000
shuffle(nums)
for _ in range(2):
for func in dict1, dict2, dict3, defaultdict1, Counter1, Counter2:
print '%.3f' % timeit(func, number=2), func.__name__
print
ZnJvbSByYW5kb20gaW1wb3J0IHNodWZmbGUKZnJvbSB0aW1laXQgaW1wb3J0IHRpbWVpdApmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdCwgQ291bnRlcgoKZGVmIGRpY3QxKCk6CiAgICBkID0ge30KICAgIGZvciBudW0gaW4gbnVtczoKICAgICAgICBpZiBudW0gaW4gZDoKICAgICAgICAgICAgZFtudW1dICs9IDEKICAgICAgICBlbHNlOgogICAgICAgICAgICBkW251bV0gPSAxCgpkZWYgZGljdDIoKToKICAgIGQgPSB7fQogICAgZm9yIG51bSBpbiBudW1zOgogICAgICAgIGRbbnVtXSA9IGQuZ2V0KG51bSwgMCkgKyAxCgpkZWYgZGljdDMoKToKICAgIGNsYXNzIE15RGljdChkaWN0KToKICAgICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KToKICAgICAgICAgICAgcmV0dXJuIDAKICAgIGQgPSBNeURpY3QoKQogICAgZm9yIG51bSBpbiBudW1zOgogICAgICAgIGRbbnVtXSArPSAxCgpkZWYgZGVmYXVsdGRpY3QxKCk6CiAgICBkID0gZGVmYXVsdGRpY3QoaW50KQogICAgZm9yIG51bSBpbiBudW1zOgogICAgICAgIGRbbnVtXSArPSAxCgpkZWYgQ291bnRlcjEoKToKICAgIGQgPSBDb3VudGVyKCkKICAgIGZvciBudW0gaW4gbnVtczoKICAgICAgICBkW251bV0gKz0gMQoKZGVmIENvdW50ZXIyKCk6CiAgICBkID0gQ291bnRlcihudW1zKQoKbnVtcyA9IHJhbmdlKDEwMDApICogMTAwMApzaHVmZmxlKG51bXMpCmZvciBfIGluIHJhbmdlKDIpOgogICAgZm9yIGZ1bmMgaW4gZGljdDEsIGRpY3QyLCBkaWN0MywgZGVmYXVsdGRpY3QxLCBDb3VudGVyMSwgQ291bnRlcjI6CiAgICAgICAgcHJpbnQgJyUuM2YnICUgdGltZWl0KGZ1bmMsIG51bWJlcj0yKSwgZnVuYy5fX25hbWVfXwogICAgcHJpbnQ=