← Все вопросы

Как сложить значения двух словарей по общим ключам?

Задан 15 месяцев назад613 просмотров3 ответа
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).

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект