嵌套任意深度的默认值

时间:2015-10-29 21:20:41

标签: python

我想嵌套任意数量的默认值,如下所示:

    @Autowired(required = false)
    @Qualifier("shellAccessDecisionManager")
    private AccessDecisionManager accessDecisionManager;

earlier所描述的那样正常。

现在,我正在寻找以任意深度执行此操作的方式/功能: 所以例如我想要一个功能

from collections import defaultdict   
D = defaultdict( lambda:defaultdict(int) )

将为dim = 3返回此信息:

def Gen_DDict( dim=3 ):
    "code I'm looking for"

2 个答案:

答案 0 :(得分:6)

def genDDict(dim=3):
    if dim==1:
        return collections.defaultdict(int)
    else:
        return collections.defaultdict(lambda: genDDict(dim-1))

输出:

In [257]: d = genDDict(2)

In [258]: d[2][1]
Out[258]: 0

答案 1 :(得分:1)

您也可以通过从内向外构建for循环来迭代地执行此操作:

def Gen_DDict(dim=3, inner_factory=int):
    factory = defaultdict(inner_factory)

    def get_factory(z):
        def factory_func():
            return z
        return factory_func

    for i in range(dim-1):
        factory = defaultdict(get_factory(factory))

    return factory