#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 Добро пожаловать. Я также добавил альтернативное решение. Надеюсь, вы тоже найдете это полезным