如果键匹配,如何从另一个字典追加到字典值

时间:2015-07-29 10:12:19

标签: python dictionary

让我说我有两本词典

dict_1 ={'A': 'a', 'B':'b', 'C': 'c', 'D':'d', 'E':'e','F':f}
dict_2 ={'A': None, 'G': None, 'H': None, 'I': None,'L': None}

我喜欢将第二个字典作为

返回的函数
dict_2 ={'A': 'a', 'G': None, 'H': None, 'I': None,'L': None}

匹配dict_1的键与dict_2中的键匹配。如果匹配,则将dict_2中的值替换为该键的dict_1中的值。没什么。

4 个答案:

答案 0 :(得分:4)

通过迭代dict_2项并使用dict_1.get()提供默认值dict_2对应值来实现此目的的简单方法 -

>>> dict_1 ={'A': 'a', 'B':'b', 'C': 'c', 'D':'d', 'E':'e','F':f}
>>> dict_2 ={'A': None, 'G': None, 'H': None, 'I': None,'L': None}
>>> for k,v in dict_2.items():
...     dict_2[k] = dict_1.get(k,v)
...
>>> dict_2
{'G': None, 'H': None, 'I': None, 'L': None, 'A': 'a'}

使用dict理解相同 -

>>> dict_1 ={'A': 'a', 'B':'b', 'C': 'c', 'D':'d', 'E':'e','F':f}
>>> dict_2 ={'A': None, 'G': None, 'H': None, 'I': None,'L': None}
>>> dict_2 = {k:dict_1.get(k,v) for k,v in dict_2.items()}
>>> dict_2
{'G': None, 'H': None, 'I': None, 'L': None, 'A': 'a'}

答案 1 :(得分:3)

另一种方法是找到公共密钥,并像这样迭代它们:

        def gson = gsonBuilder.create()
        // because the incoming JSON contains an id this will read the DomainObject
        // from the database and update it!
        def domainObjectInstance = gson.fromJson(request.reader, DomainObject)

        domainObjectInstance.save();

如果与字典中的条目总数相比,常用条目相对较少,则计算成本会低得多。

答案 2 :(得分:2)

您可以使用dict理解和if else来执行此操作:

dict_1 ={'A': 'a', 'B':'b', 'C': 'c', 'D':'d', 'E':'e','F':f}
dict_2 ={'A': None, 'G': None, 'H': None, 'I': None,'L': None}
dict_2={a : dict_1[a] if a in dict_1 else dict_2[a] for a in dict_2.keys() }
print dict_2

<强>输出:

{'A': 'a', 'H': None, 'I': None, 'L': None, 'G': None}

但这会创建一个新的dict对象

答案 3 :(得分:1)

您可以使用dict.viewkeys查找常用密钥:

dict_1 ={'A': 'a', 'B':'b', 'C': 'c', 'D':'d', 'E':'e','F':'f'}
dict_2 ={'A': None, 'G': None, 'H': None, 'I': None,'L': None}

for k in dict_1.viewkeys() & dict_2.viewkeys():
    dict_2[k] = dict_1[k]

print(dict_2)
{'A': 'a', 'H': None, 'I': None, 'L': None, 'G': None}

对于python3,只需使用.keys,因为它返回dictionary-view-object而不是列表:

for k in dict_1.keys() & dict_2.keys():
    dict_2[k] = dict_1[k]

print(dict_2)