2014-03-24 80 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'} 
>>>