collections.defaultdict is nice, especially when counting things. But, defaultdict only lets you use zero-argument constructors. Pffft! Fortunately, it's easy to write a defaultdict which passes arguments to the constructor:
class defaultdict2(dict):
def __init__(self, factory, factArgs=(), dictArgs=()):
dict.__init__(self, *dictArgs)
self.factory = factory
self.factArgs = factArgs
def __missing__(self, key):
self[key] = self.factory(*self.factArgs)
return self[key]
Update 2/8/10: added "return" line to __missing__ per discussion in this post on __missing__.
No comments:
Post a Comment