fork download
  1. from random import shuffle
  2. from timeit import timeit
  3. from collections import defaultdict, Counter
  4.  
  5. def dict1():
  6. d = {}
  7. for num in nums:
  8. if num in d:
  9. d[num] += 1
  10. else:
  11. d[num] = 1
  12.  
  13. def dict2():
  14. d = {}
  15. for num in nums:
  16. d[num] = d.get(num, 0) + 1
  17.  
  18. def dict3():
  19. class MyDict(dict):
  20. def __missing__(self, key):
  21. return 0
  22. d = MyDict()
  23. for num in nums:
  24. d[num] += 1
  25.  
  26. def defaultdict1():
  27. d = defaultdict(int)
  28. for num in nums:
  29. d[num] += 1
  30.  
  31. def Counter1():
  32. d = Counter()
  33. for num in nums:
  34. d[num] += 1
  35.  
  36. def Counter2():
  37. d = Counter(nums)
  38.  
  39. nums = range(1000) * 1000
  40. shuffle(nums)
  41. for _ in range(2):
  42. for func in dict1, dict2, dict3, defaultdict1, Counter1, Counter2:
  43. print '%.3f' % timeit(func, number=2), func.__name__
  44. print
Success #stdin #stdout 3.64s 17788KB
stdin
Standard input is empty
stdout
0.161 dict1
0.221 dict2
0.260 dict3
0.117 defaultdict1
0.485 Counter1
0.378 Counter2

0.161 dict1
0.221 dict2
0.260 dict3
0.117 defaultdict1
0.484 Counter1
0.374 Counter2