让我说我有两本词典
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中的值。没什么。
答案 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)