Python Как добавить все значения в 2d-словарь и вернуть один словарь с суммированными значениями?

#python #python-3.x #dictionary

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

Вопрос:

Часть программы, которую я разрабатываю, имеет 2D dict длину n .

Пример словаря:

 test_dict = {
0: {'A': 2, 'B': 1, 'C': 5}, 
1: {'A': 3, 'B': 1, 'C': 2}, 
2: {'A': 1, 'B': 1, 'C': 1}, 
3: {'A': 4, 'B': 2, 'C': 5}
}
  

Все словари имеют одинаковые ключи, но разные значения. Мне нужно суммировать все значения как равные ниже.

Я попытался объединить словари, используя следующее:

 new_dict = {}
for k, v in test_dict.items():
    new_dict.setdefault(k, []).append(v) 
  

Я также пытался использовать:

 new_dict = {**test_dict[0], **test_dict[1], **test_dict[2], **test_dict[3]}
  

К сожалению, мне не повезло получить желаемый результат.

Желаемый результат: outcome = {'A': 10, 'B': 5, 'C': 13}

Как я могу добавить все значения в один словарь?

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

1. Не без того, что вы пробовали?

2. Используйте collections.Counter для упрощения вашего кода.

Ответ №1:

Решение с использованием pandas

Преобразуйте ваш dict в pandas.DataFrame , а затем выполните суммирование по столбцам и преобразуйте его обратно в dict .

 import pandas as pd

df = pd.DataFrame.from_dict(test_dict, orient='index')
print(df.sum().to_dict())
  

Вывод:

 {'A': 10, 'B': 5, 'C': 13}
  

Альтернативное решение

Использование collections.Counter , которое позволяет добавлять значения одних и тех же ключей внутри dict

 from collections import Counter

d = Counter()    
for _,v in test_dict.items():
    d.update(v)

print(d)
  

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

1. @D.Morrissey Добро пожаловать. Я также добавил альтернативное решение. Надеюсь, вы тоже найдете это полезным