Два cписка объединить в словарь с обработкой
Есть два списка:
unique_set2 = ['1111', '1111', '1231', '1211', '1111', '1231', '1001', '1001', '1001', '1001', '1111', '1231', '1231', '1001', '1001', '1111', '1505', '1231', '1231', '1001', '1001', '1231', '1211', '1212']
count = [111, 3, 13, 111, 9, 5, 17, 10, 13, 3, 16, 4, 16, 11, 18, 12, 14, 4, 3, 2, 14, 14, 10, 10]
Надо объединить их в словарь с обработкой. Если ключ уже есть, то значение прибавлять к имеющемуся:
d = {}
for i, j in zip(unique_set2, count):
if i in d:
прибавлять значение j к имеющемуся
else:
добавить новую пару в словарь
Ответы (2 шт):
Автор решения: Zhihar
→ Ссылка
в лоб так:
res = dict()
for first, second in zip(unique_set2, count):
if first in res:
res[first] += second
else:
res[first] = second
print(res)
чуть более короткое решение:
res = dict()
for first, second in zip(unique_set2, count):
res[first] = res.get(first, 0) + second
P.S.
чтобы подсчитать среднее - нужно модифицировать код на такой:
res = dict()
for first, second in zip(unique_set2, count):
res[first] = res.get(first, []) + [second]
for key in res:
res[key] = sum(res[key]) / len(res[key])
print(res)
или такой:
res = dict()
counts = dict()
for first, second in zip(unique_set2, count):
res[first] = res.get(first, 0) + second
counts[first] = counts.get(first, 0) + 1
for key in res:
res[key] /= counts[key]
Автор решения: SergFSM
→ Ссылка
вариант похожий на уже предложенные с циклом:
res = dict.fromkeys(unique_set2, 0)
for i in range(len(count)):
res[unique_set2[i]] += count[i]
с использованием библиотеки pandas:
import pandas as pd
res = pd.DataFrame({'set':unique_set2,'count':count}).groupby('set')['count'].sum().to_dict()
если во втором варианте заменить sum на mean то получите средние значения