Суммирование значений ключей при объединении словарей в python 3

#python-3.x #dictionary

#python-3.x #словарь

Вопрос:

Я получил эти 3 словаря:

 d = {'x': 1, 'y': 2, 'z': 3}

e = {'x': 2, 'y': 3, 'z': 1}

f = {'t': 1, 'q': 2, 'n': 3}
  

Я создал новый dict:

 new_dict = {}
  

и затем я использовал:

 new_dict.update(d)
new_dict.update(e)
new_dict.update(f)
  

и я получил :

 new_dict = {'x': 2, 'y': 3, 'z': 1, 't': 1, 'q': 2, 'n': 3}
  

но я хочу получить :

 {'x': 3, 'y': 5, 'z': 4, 't': 1, 'q': 2, 'n': 3}
  

Другими словами, я не хочу, чтобы каждый ключ и значение переопределяли предыдущий — я хочу суммировать значения каждого ключа. как мне это сделать?

Комментарии:

1. Используйте collections.Counter или реализуйте добавление явно, обновление просто заменит любые существующие ключи.

2. Проверьте, помог ли вам мой ответ @ temp323232!

Ответ №1:

Использование collections.Counter

Пример:

 from collections import Counter

d = {'x': 1, 'y': 2, 'z': 3}
e = {'x': 2, 'y': 3, 'z': 1}
f = {'t': 1, 'q': 2, 'n': 3}

new_dict = Counter(d)   Counter(e)   Counter(f)
print(new_dict)
  

Вывод:

 Counter({'y': 5, 'z': 4, 'n': 3, 'x': 3, 'q': 2, 't': 1})
  

Ответ №2:

Попробуйте:

 from collections import Counter

d = {'x': 1, 'y': 2, 'z': 3}
e = {'x': 2, 'y': 3, 'z': 1}
f = {'t': 1, 'q': 2, 'n': 3}

l = [d,e,f]

new_dict = Counter()
for d in l:
    new_dict.update(d)
  

и вы получаете:

 Counter({'x': 3, 'y': 5, 'z': 4, 't': 1, 'q': 2, 'n': 3})
  

Ответ №3:

Вы можете просто перебирать каждый словарь и суммировать значения одних и тех же ключей, вместо создания 3 Collections.Counter экземпляров

 d = {'x': 1, 'y': 2, 'z': 3}
e = {'x': 2, 'y': 3, 'z': 1}
f = {'t': 1, 'q': 2, 'n': 3}

dct = {}
#Iterate over every dict
for l in [d, e, f]:
    #Add up values for the same key
    for k,v in l.items():
        if k in dct:
            dct[k]  = v
        else:
            dct[k] = v

print(dct)
#{'x': 3, 'y': 5, 'z': 4, 't': 1, 'q': 2, 'n': 3}