from timeit import timeit
setup = """
from collections import defaultdict
from random import random
tabledata = {
"A%d_000000_%d" % (i, j): "%f" % (random() * 100,) for i in xrange(100) for j in xrange(100000)
}
"""
use_setdefault = """
new_d = {}
for k in tabledata:
key, mid, subkey = k.split('_')
new_d.setdefault(key, []).append({subkey:tabledata[k]})
"""
print 'use_setdefault:', timeit(use_setdefault, setup=setup, number=10)
use_setdefault: 220.957348824
use_ifelse = """
new_d = {}
for k in tabledata:
key, mid, subkey = k.split('_')
if key not in new_d:
new_d[key] = []
new_d[key].append({subkey:tabledata[k]})
"""
print 'use_ifelse:', timeit(use_ifelse, setup=setup, number=10)
use_ifelse: 211.045136929
use_try = """
new_d = {}
for k in tabledata:
key, mid, subkey = k.split('_')
try:
new_d[key]
except KeyError:
new_d[key] = []
new_d[key].append({subkey:tabledata[k]})
"""
print 'use_try:', timeit(use_try, setup=setup, number=10)
use_try: 217.287450075
use_defaultdict = """
new_d = defaultdict(list)
for k in tabledata:
key, mid, subkey = k.split('_')
new_d[key].append({subkey:tabledata[k]})
"""
print 'use_defaultdict:', timeit(use_defaultdict, setup=setup, number=10)
use_defaultdict: 207.548582792