Вы можете разбить эту проблему на два этапа, используя вспомогательную функцию, которая обрабатывает объединение.
dict1 = {
'a': ([1,2,3],[-1,-2,-3]),
'b': ([1,2,3],[-1,-2,-3]),
'z': ([],[-1])
}
dict2 = {
'a': ([4,5],[]),
'c': ([1,2,3],[-4]),
'z': ([],[-3])
}
def ordered_list_merge(lst1, lst2):
'''
Merges two lists, and does not add duplicates from lst2 into lst1
'''
resulting_list = lst1.copy() #to ensure list 1 is not mutated by changes to resulting_list
resulting_list.extend(x for x in lst2 if x not in resulting_list)
return resulting_list
import copy
result_dict = copy.deepcopy(dict1) #to ensure result_dict is an entirely new object, and mutations on result_dict do not affect dict1
for k, v in dict2.items():
if k not in result_dict:
result_dict[k] = v
else:
result_dict[k] = tuple(ordered_list_merge(lst1, lst2)
for lst1, lst2 in
zip(result_dict[k], v))
print(result_dict)
#Output:
{'a': ([1, 2, 3, 4, 5], [-1, -2, -3]),
'b': ([1, 2, 3], [-1, -2, -3]),
'z': ([], [-1, -3]),
'c': ([1, 2, 3], [-4])}
Обратите внимание, что словари по своей природе неупорядочены (или помните порядок вставки в Python 3.7+) и не должны бытьполагался на заказ.Используйте сортировку, чтобы получить список кортежей, или используйте OrderedDict, если порядок также важен.