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