#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}