Мне не нравится set() с ним результат нехорошо отсортирован.
>>> pizza,salad = {'мука, кг': 1,
'помидоры, кг': 1.5,
'шампиньоны, кг': 1.5,
'сыр, кг': 0.8,
'оливковое масло, л': 0.1,
'дрожжи, г': 50},{'огурцы, кг': 1,
'перцы, кг': 1,
'помидоры, кг': 1.5,
'оливковое масло, л': 0.1,
'листья салата, кг': 0.4}
>>> def summ(a,b):
c= {}
for k in list(a.keys())+list(b.keys()):
if k in b:c[k] = b[k]
if k not in c: c[k] = 0
if k in a:c[k] += a[k]
return c
>>> summ(pizza,salad)
{'мука, кг': 1, 'помидоры, кг': 3.0, 'шампиньоны, кг': 1.5, 'сыр, кг': 0.8, 'оливковое масло, л': 0.2, 'дрожжи, г': 50, 'огурцы, кг': 1, 'перцы, кг': 1, 'листья салата, кг': 0.4}
>>> s = {}
>>> s = summ(s,pizza)
>>> s = summ(s,salad)
>>> s
{'мука, кг': 1, 'помидоры, кг': 3.0, 'шампиньоны, кг': 1.5, 'сыр, кг': 0.8, 'оливковое масло, л': 0.2, 'дрожжи, г': 50, 'огурцы, кг': 1, 'перцы, кг': 1, 'листья салата, кг': 0.4}
>>>
list(a.keys())+list(b.keys())
экивалентно
set(a).union(set(b))