代码之家  ›  专栏  ›  技术社区  ›  matteo

混合默认dict(dict和int)

  •  4
  • matteo  · 技术社区  · 7 年前

    我有两个示例列表,我想要实现的是获得一个 嵌套

    下面的代码工作得很好:

    from collections import defaultdict
    
    l1 = [1,2,3,4]
    l2 = [5,6,7,8]
    dd = defaultdict(int)
    
    for i in l1:
        for ii in l2:
            dd[i] += ii
    

    但我要做的是在 d 字典:

    from collections import defaultdict
    
    l1 = [1,2,3,4]
    l2 = [5,6,7,8]
    dd = defaultdict(int)
    
    for i in l1:
        for ii in l2:
            dd[i]['mykey'] += ii
    

    这会抛出一个错误:

    Traceback (most recent call last):
      File "/usr/lib/python3.6/code.py", line 91, in runcode
        exec(code, self.locals)
      File "<input>", line 1, in <module>
      File "<string>", line 12, in <module>
    TypeError: 'int' object is not subscriptable
    

    基本上,我无法理解的是,是否有机会混在一起 defaultdict(dict) defaultdict(int) .

    2 回复  |  直到 7 年前
        1
  •  5
  •   Jean-François Fabre    7 年前

    您想要一个默认整数的默认dict:

    dd = defaultdict(lambda: defaultdict(int))
    

    运行代码后:

    >>> dd
    {1: defaultdict(<class 'int'>, {'mykey': 26}),
     2: defaultdict(<class 'int'>, {'mykey': 26}),
     3: defaultdict(<class 'int'>, {'mykey': 26}),
     4: defaultdict(<class 'int'>, {'mykey': 26})}
    
        2
  •  5
  •   Dani Mesejo    7 年前

    defautdict(int) 例如,作为默认值,提供执行该操作的函数 lambda : defaultdict(int)

    from collections import defaultdict
    from pprint import pprint
    
    l1 = [1, 2, 3, 4]
    
    l2 = [5, 6, 7, 8]
    
    dd = defaultdict(lambda : defaultdict(int))
    
    for i in l1:
    
        for ii in l2:
            dd[i]['mykey'] += ii
    
    
    pprint(dd)
    

    输出

    defaultdict(<function <lambda> at 0x7efc74d78f28>,
                {1: defaultdict(<class 'int'>, {'mykey': 26}),
                 2: defaultdict(<class 'int'>, {'mykey': 26}),
                 3: defaultdict(<class 'int'>, {'mykey': 26}),
                 4: defaultdict(<class 'int'>, {'mykey': 26})})
    
    推荐文章