2014-03-24 131 views
0

我有一個字典合併字典詞典的所有按鍵,並創造新的字典

 
{ 
    "a": "b", 
    "c": { 
     "d": "e", 
     "f": { 
      "g": "h", 
      "i": "j" 
     } 
    } 
} 

我想輸出,如:

 
{ 
    "a": "b", 
    "c.d": "e", 
    "c.f.g": "h", 
    "c.f.i": "j" 
} 

我試圖解決

 
>>> def handle(inp): 
    out = {} 
    for i in inp: 
     if type(inp[i]) is dict: 
      for jj in inp[i].keys(): 
       out[i+'.'+jj] = inp[i][jj] 
     else: 
      out[i] = inp[i] 
    return out 

>>> handle(inp) 
{'a': 'b', 'c.f': {'i': 'j', 'g': 'h'}, 'c.d': 'e'} 

但我無法完全解決它。

+1

您將不得不爲每個內部字典遞歸地執行此操作。 –

+4

'{「a」:{「b」:2},「a.b」:1}'的預期輸出是什麼? – Kevin

+1

根據你想要達到的目標,可能有其他方法可以做到這一點。正如@凱文提到的,這可能會引起歧義。 –

回答

3

您需要爲每個字典遞歸地執行此操作。

This Works。

>>> 
>>> def handle(inp): 
...  out = {} 
...  for i in inp: 
...   if type(inp[i]) is dict: 
...    inp[i]=handle(inp[i]) 
...    for jj in inp[i].keys(): 
...     out[i+'.'+jj] = inp[i][jj] 
...   else: 
...    out[i] = inp[i] 
...  return out 
... 
>>> handle(inp) 
{'a': 'b', 'c.f.i': 'j', 'c.d': 'e', 'c.f.g': 'h'} 
>>>