Попытка обновить словарь большим словарём - PullRequest
4 голосов
/ 29 марта 2020

Я хочу обновить словарь, например:

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

Используя этот словарь:

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

Выходные данные должны быть:

dict1 = {"brand": "Fiat","model": "Toro","year": 1964}

Как я могу сделать это?

Ответы [ 4 ]

7 голосов
/ 29 марта 2020

Сначала вам нужно перебрать словарь, который вы хотите обновить, а затем заменить значение ключа (если оно есть).

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]
2 голосов
/ 29 марта 2020

Простым решением было бы просто l oop поверх пересекающихся ключей и обновить 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}
2 голосов
/ 29 марта 2020

Вы можете использовать словарь, используя dict.get метод:

dict1 = {k : dic2.get(k, v)  for k, v in dict1.items()}
# {'brand': 'Fiat', 'model': 'Toro', 'year': 1964}
1 голос
/ 29 марта 2020

Решение с диктом понимания :

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}
...