Объединение словарей
У меня есть алгоритм объединения словарей:
dictA = json.loads(lessons)
dictB = json.loads(f.read())
merged_dict = {key: value for (key, value) in (dictA.items() + dictB.items())}
jsonString_merged = merged_dict
И он объединяет таким образом, что переписывает уже существующие значения из lessons в файл. И мне нужна помощь с переделыванием алгоритма таким образом, чтобы он только добавлял значения, но не переписывал старые. Пример:
# Входные данные
dict1 = {"a": {}, "b": "tmp"}
dict2 = {"a": "another_tmp"}
# Результат
result = {"a": "another_tmp", "b": "tmp"}
# По факту к dict2 добавили все значения кроме "a", т.к. оно уже существует.
Ответы (4 шт):
Автор решения: Zhihar
→ Ссылка
попробуйте такой вариант :)
dict3 = {**dict1, **{key: value for key, value in dict2.items() if key not in dict1}}
Автор решения: Qwertiy
→ Ссылка
(dictA.items() + dictB.items())
А просто поменять их местами - не вариант?
(dictB.items() + dictA.items())
А если временно, то можно вообще костыль приделать
(dictA.items() + dictB.items() + dictA.items())
Автор решения: vadim vaduxa
→ Ссылка
def exp(*dicts, out=None):
if out is None:
out = {}
for dt in dicts:
for k in dt.keys() - out.keys():
out[k] = dt[k]
return out
dict1 = {"a": {}, "b": "tmp"}
dict2 = {"a": {}, "c": "tmp"}
dict3 = {"a": "another_tmp"}
print(exp(dict3, dict2, dict1)) # {'a': 'another_tmp', 'c': 'tmp', 'b': 'tmp'}
Автор решения: Михаил Муругов
→ Ссылка
dictA = json.loads(lessons) # Тот, значения которого хотим сохранить
dictB = json.loads(f.read()) # Тот, значения которого хотим вставить
merged_dict = {**dictB, **dictA}
# Сначала распаковываем словарь "добавочных" значений
# Затем распаковываем словарь "сохраняемых" значений, перетирая предыдущее при коллизии