2014-09-25 90 views
0
{255: 
    {255: 
     {1: 
      {2:{} 
      } 
     } 
    } 
}, 
{255: 
    {255: 
     {2: 
      {3:{} 
      } 
     } 
    } 
} 

我的字典裏是非常複雜的(比上述更加項)合併兩個高度嵌套的Python字典

現在我要合併兩個庫

輸出應該是:

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

也可能的最大嵌套是直到5級。

+0

有沒有碰撞的機會?如果是這樣,他們應該如何解決?在任何時候是否有非字典值,或者最裏面的項目是否總是空字典? – Blckknght 2014-09-25 08:02:18

回答

2

不確定我是否tood,但這個怎麼樣:

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

我最初以爲'更新'與另一個字典會導致相同的結果。 – 2014-09-25 08:21:55

+0

也許這個關於遞歸合併字典的答案是有幫助的:http://stackoverflow.com/questions/7204805/dictionaries-of-dictionaries-merge – 2014-09-25 08:23:07

1

下面是關於喬治的回答一個簡單的變化,它不會破壞任何的參數值(它返回在新的字典數據的副本,而不是重用現有的) :

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 

額外的參數是用來使代碼複製的第一個字典上的第一個呼叫,但不能對任何遞歸調用(因爲他們已經被然後複製)。這是一個實現細節,當您從其他代碼調用它時,您總是使用默認值。

+0

好的調用,我應該叫我func'extend'而不是'merge'。 – georg 2014-09-25 08:29:34