合并两个高度嵌套的 Python 字典


 {255:
     {255:
         {1:
            {2:{}
            }
         }
     }
 },
 {255:
     {255:
         {2:
           {3:{}
           }
         }
     }
 }

我的字典非常复杂(甚至比上面显示的条目更多(

现在我想合并两个词典

输出应为:

 {255:
     {255:
         {1:
            {2:{}
            }
         },
        {2:
           {3:{}
        }
     }
 }

此外,最大嵌套可能达到 5 级。

不确定我是否理解,但是这个怎么样:

def merge(a, b):
    for x in b:
        if x in a:
            merge(a[x], b[x])
        else:
            a[x] = b[x]
    return a

以下是 georg 答案的简单变体,它不会破坏任何一个参数值(它返回新字典中的数据副本,而不是重用现有字典(:

import copy
def merge(a, b, copy_a=True):
    if copy_a:
        a = copy.deepcopy(a)
    for x in b:
        if x in a:
            merge(a[x], b[x], copy_a=False)
        else:
            a[x] = copy.deepcopy(b[x])
    return a

额外的参数用于使代码在第一次调用时复制第一个字典,但不在任何递归调用上复制(因为那时它们已经被复制了(。这是一个实现细节,从其他代码调用它时,你将始终使用默认值。

最新更新