from timeit import timeit
from collections import defaultdict, Counter
from random import shuffle
from itertools import product
def f():
d = {}
for i, j in edges:
if i not in d:
d[i] = {j: 1}
elif j in d[i]:
d[i][j] += 1
else:
d[i][j] = 1
def g():
d = defaultdict(lambda: defaultdict(int))
for i, j in edges:
d[i][j] += 1
def h():
d = defaultdict(Counter)
for i, j in edges:
d[i][j] += 1
edges = list(product(range(300), repeat=2)) * 10
shuffle(edges)
for _ in range(2):
print 'dict[dict[int]] ', timeit(f, number=1)
print 'defdict[defdict[int]', timeit(g, number=1)
print 'defdict[Counter] ', timeit(h, number=1)
print
ZnJvbSB0aW1laXQgaW1wb3J0IHRpbWVpdApmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdCwgQ291bnRlcgpmcm9tIHJhbmRvbSBpbXBvcnQgc2h1ZmZsZQpmcm9tIGl0ZXJ0b29scyBpbXBvcnQgcHJvZHVjdAoKZGVmIGYoKToKICAgIGQgPSB7fQogICAgZm9yIGksIGogaW4gZWRnZXM6CiAgICAgICAgaWYgaSBub3QgaW4gZDoKICAgICAgICAgICAgZFtpXSA9IHtqOiAxfQogICAgICAgIGVsaWYgaiBpbiBkW2ldOgogICAgICAgICAgICBkW2ldW2pdICs9IDEKICAgICAgICBlbHNlOgogICAgICAgICAgICBkW2ldW2pdID0gMQoKZGVmIGcoKToKICAgIGQgPSBkZWZhdWx0ZGljdChsYW1iZGE6IGRlZmF1bHRkaWN0KGludCkpCiAgICBmb3IgaSwgaiBpbiBlZGdlczoKICAgICAgICBkW2ldW2pdICs9IDEKCmRlZiBoKCk6CiAgICBkID0gZGVmYXVsdGRpY3QoQ291bnRlcikKICAgIGZvciBpLCBqIGluIGVkZ2VzOgogICAgICAgIGRbaV1bal0gKz0gMQoKZWRnZXMgPSBsaXN0KHByb2R1Y3QocmFuZ2UoMzAwKSwgcmVwZWF0PTIpKSAqIDEwCnNodWZmbGUoZWRnZXMpCmZvciBfIGluIHJhbmdlKDIpOgogICAgcHJpbnQgJ2RpY3RbZGljdFtpbnRdXSAgICAgJywgdGltZWl0KGYsIG51bWJlcj0xKQogICAgcHJpbnQgJ2RlZmRpY3RbZGVmZGljdFtpbnRdJywgdGltZWl0KGcsIG51bWJlcj0xKQogICAgcHJpbnQgJ2RlZmRpY3RbQ291bnRlcl0gICAgJywgdGltZWl0KGgsIG51bWJlcj0xKQogICAgcHJpbnQ=