Функция, которая будет возвращать сумму значений одинаковых ключей
Уже несколько дней не могу решить задачу, помогите пожалуйста:
Напишите функцию elections(), принимающую на вход несколько кортежей, в каждом из которых два элемента: первый элемент это фамилия кандидата, а второй — число голосов, отданных за него в каком-то из штатов. Подведите итоги выборов: верните словарь, ключами которого будут фамилии кандидатов, а значениями — общее число голосов (выборщиков), которое они получили на этих выборах.
assert elections( ('McCain', 10),('McCain', 5),('Obama', 9), ('Obama', 8), ('McCain', 1) )=={'McCain': 16, 'Obama': 17}
Благодарю.
Ответы (3 шт):
Автор решения: vadim vaduxa
→ Ссылка
for key, value in list_:
try:
dict_[key] += value
except KeyError:
dict_[key] = value
Автор решения: strawdog
→ Ссылка
def elections(a: tuple) -> dict:
res = {}
for i in a:
res.setdefault(i[0],0)
res[i[0]] += i[1]
return res
Проверяем:
a = ( ('McCain', 10),('McCain', 5),('Obama', 9), ('Obama', 8), ('McCain', 1) )
print(elections(a))
получаем:
{'McCain': 16, 'Obama': 17}
Автор решения: Евгений
→ Ссылка
def elections(*data):
last_names = {elem[0] for elem in data}
return {
lname :
sum(elem[1] for elem in filter(lambda x: x[0] == lname, data))
for lname in last_names
}
print(elections( ('McCain', 10), ('McCain', 5), ('Obama', 9), ('Obama', 8), ('McCain', 1) ))
Результат
{'Obama': 17, 'McCain': 16}