from __future__ import print_function
from timeit import timeit
from random import choice
from string import printable
from collections import Counter, defaultdict
def default_dict(input_num, defaultdict=defaultdict):
y = defaultdict(list)
for count, s in map(lambda x: (input_num.count(x), x), set(input_num)):
y[count].append(s)
return y
def counter(input_num, defaultdict=defaultdict, Counter=Counter):
x = Counter(input_num)
y = defaultdict(list)
for s, count in x.items():
y[count].append(s)
return y
test = ''.join([choice(printable) for _ in range(10000)])
number = 1000
print('str.count:', timeit('f(t)', 'from __main__ import default_dict as f, test as t', number=number))
print('Counter: ', timeit('f(t)', 'from __main__ import counter as f, test as t', number=number))
ZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgpmcm9tIHRpbWVpdCBpbXBvcnQgdGltZWl0CmZyb20gcmFuZG9tIGltcG9ydCBjaG9pY2UKZnJvbSBzdHJpbmcgaW1wb3J0IHByaW50YWJsZQpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyLCBkZWZhdWx0ZGljdAoKZGVmIGRlZmF1bHRfZGljdChpbnB1dF9udW0sIGRlZmF1bHRkaWN0PWRlZmF1bHRkaWN0KToKICAgIHkgPSBkZWZhdWx0ZGljdChsaXN0KQogICAgZm9yIGNvdW50LCBzIGluIG1hcChsYW1iZGEgeDogKGlucHV0X251bS5jb3VudCh4KSwgeCksIHNldChpbnB1dF9udW0pKToKICAgICAgICB5W2NvdW50XS5hcHBlbmQocykKICAgIHJldHVybiB5CgpkZWYgY291bnRlcihpbnB1dF9udW0sIGRlZmF1bHRkaWN0PWRlZmF1bHRkaWN0LCBDb3VudGVyPUNvdW50ZXIpOgogICAgeCA9IENvdW50ZXIoaW5wdXRfbnVtKQogICAgeSA9IGRlZmF1bHRkaWN0KGxpc3QpCiAgICBmb3IgcywgY291bnQgaW4geC5pdGVtcygpOgogICAgICAgIHlbY291bnRdLmFwcGVuZChzKQogICAgcmV0dXJuIHkKCnRlc3QgPSAnJy5qb2luKFtjaG9pY2UocHJpbnRhYmxlKSBmb3IgXyBpbiByYW5nZSgxMDAwMCldKQpudW1iZXIgPSAxMDAwCgpwcmludCgnc3RyLmNvdW50OicsIHRpbWVpdCgnZih0KScsICdmcm9tIF9fbWFpbl9fIGltcG9ydCBkZWZhdWx0X2RpY3QgYXMgZiwgdGVzdCBhcyB0JywgbnVtYmVyPW51bWJlcikpCnByaW50KCdDb3VudGVyOiAgJywgdGltZWl0KCdmKHQpJywgJ2Zyb20gX19tYWluX18gaW1wb3J0IGNvdW50ZXIgYXMgZiwgdGVzdCBhcyB0JywgbnVtYmVyPW51bWJlcikpCg==