合并两个具有相同键的字典

Jus*_*ous 4 python merge dictionary

我有以下 2 个要合并的字典。我想合并相同的键,并且我想保留两个字典的值。我用过,dict1.update(dict2)但它取代了从第二到第一字典的值。

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'}}
Run Code Online (Sandbox Code Playgroud)

我得到了什么?

{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'}}
Run Code Online (Sandbox Code Playgroud)

我需要的

{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'}}
Run Code Online (Sandbox Code Playgroud)

我遵循了合并“几个”python 词典的步骤,但我有两个不同的词典需要合并。请帮忙...

cs9*_*s95 6

遍历 中的键dict1,并从中检索相应的值dict2,然后更新 -

for k in dict1:
     dict1[k].update(dict2.get(k, {})) # dict1.get(k).update(dict2.get(k, {}))
Run Code Online (Sandbox Code Playgroud)

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"
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里,我使用的dict.get,因为它允许你指定在该事件要返回默认值k不存在作为一个关键dict2。在这种情况下,默认值是空字典{},调用dict.update({})什么都不做(并且不会引起任何问题)。