Any arguments to defaultdict
after the default_factory
are treated just like arguments to dict
:
>>> defaultdict(int, [(i, i*i) for i in range(5)])
defaultdict(<type 'int'>, {0: 0, 1: 1, 2: 4, 3: 9, 4: 16})
Just pass the comprehension to defaultdict
and let it do the work:
def defaultdict_factory_factory(default_factory):
def defaultdict_factory(*args, **kwargs):
return defaultdict(default_factory, *args, **kwargs)
return defaultdict_factory
Or use functools.partial
:
def defaultdict_factory_factory(default_factory):
return partial(defaultdict, default_factory)