簡體   English   中英

合並具有相同鍵的兩個字典

[英]merge two dictionary with same key

我有以下 2 個要合並的詞典。 我想合並相同的鍵,我想保留兩個字典的值。 我使用dict1.update(dict2)但它替換了第 2 到第 1 個字典中的值。

u'dict1', {160: {u'na': u'na'}, 162: {u'test_': u'qq', u'wds': u'wew'}, 163: {u'test_env': u'test_env_value', u'env': u'e'}, 159: {u'no' : u'test_no'}

u'dict2', {160: {u'naa': u'na'}, 162: {u'envi_specs': u'qq', u'wds': u'wew'}, 163: {u'test_env': u'test_env_value', u'ens': u's'}}

我得到了什么?

{160: {u'naa': u'na'}, 162: {u'envi_specs': u'qq', u'wds': u'wew'}, 163: {u'test_env': u'test_env_value', u'ens': u's'}}

我需要的

{160: {u'naa': u'na', u'na': u'na'}, 162: {u'envi_specs': u'qq', u'wds': u'wew', u'test_': u'qq'}, 163: {u'test_env': u'test_env_value', u'ens': u's', u'env': u'e'}}

我遵循合並“幾個”python 詞典,但我有兩個不同的詞典需要合並。 請幫助...

循環遍歷dict1的鍵,並從dict2檢索相應的值,並更新 -

for k in dict1:
     dict1[k].update(dict2.get(k, {})) # dict1.get(k).update(dict2.get(k, {}))

print(dict1)    
{
    "160": {
        "naa": "na",
        "na": "na"
    },
    "162": {
        "wds": "wew",
        "test_": "qq",
        "envi_specs": "qq"
    },
    "163": {
        "test_env": "test_env_value",
        "ens": "s",
        "env": "e"
    },
    "159": {
        "no": "test_no"
    }
}

在這里,我使用dict.get因為它允許您指定在k不存在作為dict2的鍵的情況下返回的默認值。 在這種情況下,默認值是空字典{} ,並且調用dict.update({})不執行任何操作(並且不會導致任何問題)。

def m3(a,b):
    if not isinstance(a,dict) and not isinstance(b,dict):return b
    for k in b:
        if k in a :
            a[k] = m3(a[k], b[k])
        else: a[k] = b[k] 
    return a       
            
d1 = {1:{"a":"A"}, 2:{"b":"B"}}

d2 = {2:{"c":"C"}, 3:{"d":"D"}}
d3 = {1:{"a":{1}}, 2:{"b":{2}}}

d4 = {2:{"c":{222}}, 3:{"d":{3}}}
d5 = {'employee':{'dev1': 'Roy'}}
d6 = {'employee':{'dev2': 'Biswas'}}

print(m3(d1,d2))

print(m3(d3,d4))
print(m3(d5,d6))

"""
Output :
{1: {'a': 'A'}, 2: {'b': 'B', 'c': 'C'}, 3: {'d': 'D'}}
{1: {'a': {1}}, 2: {'b': {2}, 'c': {222}}, 3: {'d': {3}}}
{'employee': {'dev1': 'Roy', 'dev2': 'Biswas'}}

"""

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM