python сортировка массивов

Есть массив member_role где указана роль и ID пользователя

member_role = {'@everyone': [269564120792039424, 472679205885313044, 766316425890889758, 987004547438366761], 'Кактус': [766316425890889758], 'Котя 3': [472679205885313044], 'Лисёнок': [269564120792039424], 'Лис': [987004547438366761], 'Микель': [269564120792039424]}

Есть второй массив data с ID пользователя и количеством опыта у этого пользователя

data = [(987004547438366761, 8.9), (269564120792039424, 500.5), (766316425890889758, 112.2), (472679205885313044, 4.5)]

Подскажите как можно получить третий массив подсчитав сколько у каждой роли в сумме опыта, в моей голове это выглядит так:

Третий массив = {["<Название роли 1>": "Количество опыта у всех её участников"], ["<Название роли 2>": "Количество опыта у всех её участников"], ["<Название роли 3>": "Количество опыта у всех её участников"]}

Если кто-то напишет код на языке python с объяснением буду очень признателен.


Ответы (2 шт):

Автор решения: n1tr0xs

Простой алгоритм решения вашей задачи:

  1. Преобразуем data в словарь вида id: point:
data_dict = dict(data)
  1. Бежим по ролям member_role:
for role in member_role
  1. Обнуляем сумму очков.
_sum = 0
  1. Суммируем очки id, находящихся в этом списке:
for user_id in member_role[role]:
    _sum += data_dict[user_id]
  1. Записываем значение:
res[role] = _sum
→ Ссылка
Автор решения: SergFSM

то же решение только чуть короче код:

data = dict(data)
res = {k:sum(map(data.get, v)) for k,v in member_role.items()}

>>> res
{'@everyone': 626.1, 'Кактус': 112.2, 'Котя 3': 4.5, 'Лисёнок': 500.5, 'Лис': 8.9, 'Микель': 500.5}
→ Ссылка