尝试使用较大的字典更新字典

5
我希望您能更新一个字典,例如:

dict1 = {"brand": "Ford","model": "Mustang","year": 1964}

使用此字典:

dic2 = {"brand": "Fiat","model": "Toro","color" : "Red","value": 20000}

输出必须是:
dict1 = {"brand": "Fiat","model": "Toro","year": 1964}

我该如何做到这一点?


2
https://stackoverflow.com/help/how-to-ask - acushner
4个回答

7
首先,您需要迭代要更新的字典,然后替换键的值(如果存在)。
for i in dict1:
    try:
        dict1[i] = dic2[i]
    except:
        pass

dict1
{'brand': 'Fiat', 'model': 'Toro', 'year': 1964}

更新:正如RoadRunner提到的那样,try: .. except: .. 可以被替换为 if i in dic2
for i in dict1:
    if i in dic2:
        dict1[i] = dic2[i]

1
这里加一个 try..except 只是为了更新匹配的键,似乎有点过了。 - RoadRunner
@RoadRunner 是的,我更新了解决方案。感谢您指出。 - OmO Walker

2

您可以使用字典推导式和 dict.get 方法:

dict1 = {k : dic2.get(k, v)  for k, v in dict1.items()}
# {'brand': 'Fiat', 'model': 'Toro', 'year': 1964}

1
尽管这并没有直接更新dict1,但它仍然是一个好的解决方案,因为它不会污染原始字典。 - RoadRunner

2
一种简单的解决方案是只需循环遍历相交的键并更新dict1:
for key in dict1.keys() & dic2.keys():
    dict1[key] = dic2[key]

print(dict1)
# {'brand': 'Fiat', 'model': 'Toro', 'year': 1964}

或者在更新之前检查键是否存在:

for key in dict1:
    if key in dic2:
        dict1[key] = dic2[key]

print(dict1)
# {'brand': 'Fiat', 'model': 'Toro', 'year': 1964}

1
使用字典推导式的解决方案:

dict comprehension

dict1 = {"brand": "Ford","model": "Mustang","year": 1964}
dict2 = {"brand": "Fiat","model": "Toro","color" : "Red","value": 20000}

dict3 = {k:dict2[k] if k in dict2 else dict1[k] for k in dict1}

但这会创建一个新的字典而不是更新dict1。 - Don Slowik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接