1 # from http://code.activestate.com/recipes/523034/
3 from collections import defaultdict
5 class defaultdict(dict):
7 def __init__(self, default_factory=None, *a, **kw):
8 if (default_factory is not None and
9 not hasattr(default_factory, '__call__')):
10 raise TypeError('first argument must be callable')
11 dict.__init__(self, *a, **kw)
12 self.default_factory = default_factory
14 def __getitem__(self, key):
16 return dict.__getitem__(self, key)
18 return self.__missing__(key)
20 def __missing__(self, key):
21 if self.default_factory is None:
23 self[key] = value = self.default_factory()
27 if self.default_factory is None:
30 args = self.default_factory,
31 return type(self), args, None, None, self.items()
34 return self.__copy__()
37 return type(self)(self.default_factory, self)
39 def __deepcopy__(self, memo):
41 return type(self)(self.default_factory,
42 copy.deepcopy(self.items()))
45 return 'defaultdict(%s, %s)' % (self.default_factory,