Функция, которая будет возвращать сумму значений одинаковых ключей

Уже несколько дней не могу решить задачу, помогите пожалуйста:

Напишите функцию 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}
→ Ссылка