← Все вопросы
Как сложить значения двух словарей по общим ключам?
14
Есть два словаря с числами, хочу получить третий, где по совпадающим ключам значения сложены, а уникальные ключи просто перенесены.
a = {"x": 1, "y": 2}
b = {"y": 5, "z": 7}
# нужно: {"x": 1, "y": 7, "z": 7}
3 ответа
23
✓ Принятый ответ — помог автору
Самый чистый способ — Counter, он умеет складываться через +:
from collections import Counter
result = Counter(a) + Counter(b)
# Counter({'y': 7, 'z': 7, 'x': 1})
Важный нюанс: при сложении Counter выкидывает нули и отрицательные значения. Если такое поведение не нужно (например, в значениях могут быть нули и их надо сохранить), используй c.update(b) или ручной цикл. Чтобы получить обычный dict обратно: dict(result).
Denis Gordon Про выкидывание нулей — частая засада, спасибо что упомянул · 15 месяцев назад
9
Без импортов, в лоб:
result = dict(a)
for k, v in b.items():
result[k] = result.get(k, 0) + v
5
Counter(a) + Counter(b).
Ваш ответ
Войдите, чтобы ответить на вопрос.