首页 > 解决方案 > 如何将三层嵌套的dict转换为三层嵌套的defaultdict?

问题描述

我已经将嵌套的默认defaultdict(lambda: defaultdict(lambda: defaultdict(int)))字典转换为嵌套字典。如何转换回相同的格式和数据类型?

标签: pythondictionarydefaultdict

解决方案


您可以事先创建目标 defaultdict 结构并使用递归函数复制其中的数据:

from collections import defaultdict

def copyToDefaultdict(source,target):
    for k,v in source.items():
        if isinstance(v,dict) and isinstance(target[k],defaultdict):
            copyToDefaultdict(v,target[k])
        else:
            target[k] = v

输出:

target = defaultdict(lambda: defaultdict(lambda: defaultdict(int)))
source = { "a": { 10: { 'x':2, 'y':3}, 12:{ 'z':4, 'w':5} },
           "b": { 20: { 'p':6, 'q':7}, 22:{ 'r':8, 's':9} } }

copyToDefaultdict(source,target)

target

defaultdict(<function <lambda> at 0x7fd9135d01e0>, 
  {'a': defaultdict(<function <lambda>.<locals>.<lambda> at 0x7fd914f9a510>, 
        {10: defaultdict(<class 'int'>, {'x': 2, 'y': 3}), 
         12: defaultdict(<class 'int'>, {'z': 4, 'w': 5})
        }), 
   'b': defaultdict(<function <lambda>.<locals>.<lambda> at 0x7fd914f9a598>, 
        {20: defaultdict(<class 'int'>, {'p': 6, 'q': 7}), 
         22: defaultdict(<class 'int'>, {'r': 8, 's': 9})
        })
  })

推荐阅读