python – 在初始化时填充defaultdict

我怎样才能获得一个可调用的工厂用于defaultdict以允许用理解填充它?我认为这可能不可能,但我想不出一个很好的理由呢?

>>> def foo(*args):
...     # TODO
...
>>> from collections import defaultdict
>>> thing = foo(defaultdict, int)
>>> d = thing((i, i*i) for i in range(3))
>>> d[2]
# should return 4
>>> d[-1]
# should return 0

解决方法:

default_factory之后对defaultdict的任何参数都被视为与dict的参数一样:

>>> defaultdict(int, [(i, i*i) for i in range(5)])
defaultdict(<type 'int'>, {0: 0, 1: 1, 2: 4, 3: 9, 4: 16})

只需将理解传递给defaultdict并让它完成工作:

def defaultdict_factory_factory(default_factory):
    def defaultdict_factory(*args, **kwargs):
        return defaultdict(default_factory, *args, **kwargs)
    return defaultdict_factory

或者使用functools.partial:

def defaultdict_factory_factory(default_factory):
    return partial(defaultdict, default_factory)
上一篇:python – lambda函数返回在defaultdict中使用的键值


下一篇:用于dict的元组的Python列表