合并两个高度嵌套的python词典

时间:2014-09-25 07:54:00

标签: python dictionary

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

我的词典非常复杂(比上面显示的条目更多)

现在我要合并两个词典

输出应该是:

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

最大嵌套也可能是5级。

2 个答案:

答案 0 :(得分:2)

不确定我是否理解,但是如何:

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

答案 1 :(得分:1)

以下是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

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