2017-05-05 13 views
1

2つのネストされた辞書データがあります。私はPythonで1つの辞書を作成するためにそれらをマージしたい。 辞書データ:Pythonで2つのネストされたdictをマージするには?

dict1 = {'employee':{'dev1': 'Roy'}} 
dict2 = {'employee':{'dev2': 'Biswas'}} 

今、私は彼らから怒鳴るような辞書を作成しようとしています。 必要な出力

dict_output = {'employee':{ 
        'dev1': 'Roy', 
        'dev2': 'Biswas' 
        } 

     } 

私の挑戦:

import json 

dict1 = {'employee':{'dev1': 'Roy'}} 
dict2 = {'employee':{'dev2': 'Biswas'}} 

dict1.update(dict2) 
print(json.dumps(dict1, indent=2)) 

出力:私は彼らに

答えて

4

をマージするdictionary.Needヘルプの両方をマージすることができません

{ 
    "employee": { 
    "dev2": "Biswas" 
    } 
} 

あなたはジュースできますst内部辞書を更新する。

>>> dict1 = {'employee':{'dev1': 'Roy'}} 
>>> dict2 = {'employee':{'dev2': 'Biswas'}} 
>>> 
>>> for key in dict1: 
...  if key in dict2: 
...   dict1[key].update(dict2[key]) 
... 
>>> dict1 
{'employee': {'dev2': 'Biswas', 'dev1': 'Roy'}} 
1

ここでは、両方の辞書に異なるキーがあり、それらをすべて保持したい場合でも機能するソリューションがあります。

from collections import defaultdict 

dict1 = {'employee': {'dev1': 'Roy'}, 'aKeyNotInDict2': {}} 
dict2 = {'employee': {'dev2': 'Biswas'}, 'aKeyNotInDict1': {}} 
merged_dict = defaultdict(dict) 

merged_dict.update(dict1) 
for key, nested_dict in dict2.items(): 
    merged_dict[key].update(nested_dict) 

print(dict(merged_dict)) 

出力:

{ 
    'employee': {'dev2': 'Biswas', 'dev1': 'Roy'}, 
    'aKeyNotInDict2': {}, 
    'aKeyNotInDict1': {} 
} 
0
#use a dict comprehension. Adding {} in get() is to set a default return value if the key doesn't exist in dict1 

{k:dict(dict1.get(k,{}).items() + v.items()) for k,v in dict2.items()} 
Out[689]: {'employee': {'dev1': 'Roy', 'dev2': 'Biswas'}} 

#Alternatively, a less readable way to merge the dicts using the dict constructor. 

{k:dict(dict1.get(k,{}), **v) for k,v in dict2.items()} 
Out[690]: {'employee': {'dev1': 'Roy', 'dev2': 'Biswas'}} 
0

`

[KEY1 == KEY2とdict1.get(KEY1).update(dict2.get(KEY2))KEY1用、ZIPにKEY2(dict1、dict2)]

印刷dict1

`` `