【问题标题】:nesting defaultdicts in an arbitrary depth以任意深度嵌套默认字典
【发布时间】:2016-01-30 05:15:44
【问题描述】:

我想像这样嵌套任意数量的默认字典:

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

earlier 所述,这可以正常工作。

现在我正在寻找任意深度的方法/功能: 所以例如我想要一个函数

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

这将为 dim=3 返回这个:

defaultdict( lambda : defaultdict( lambda : defaultdict(int) ) )

【问题讨论】:

    标签: python


    【解决方案1】:
    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
    

    【讨论】:

    • 完美的正是我想要的
    【解决方案2】:

    您也可以使用从内向外构建的 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-06
      • 2015-08-19
      • 2018-09-03
      • 1970-01-01
      • 2019-05-28
      • 2022-11-17
      相关资源
      最近更新 更多