Попытка добавить элементы в список списков кортежей

Я делаю приложение для подбора игр и застрял на попытке получить сводку баллов для пользователей. Список состоит из 18 списков (недель) со всеми пользователями и их соответствующими очками, отсортированными по алфавиту. Я не знаю, как создать список с пользователями---> все очки вместе взятые.

Вот пример только с 2 пользователями

[[('user1', 25), ('user2 ', 18)], [('user1', 18), ('user2 ', 25)], [('user1', 18), ('user2 ', 25)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)]]

Это решение должно работать:

data = your_list
out = {}

for week in data:
    for user in week:
        if user[0] in out.keys():
            out[user[0]] += user[1]
        else:
            out[user[0]] = user[1]

print(out) # Just in case you want to try

Вот что я бы предложил:

from collections import Counter

data = [[('user1', 25), ('user2 ', 18)], [('user1', 18), ('user2 ', 25)], [('user1', 18), ('user2 ', 25)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)], [('user1', 0), ('user2 ', 0)]]

user_points = Counter()
for week in data:
    for user, points in week:
        user_points[user] += points

print(user_points) # Counter({'user2 ': 68, 'user1': 61})

Вы можете сделать это с помощью zip и dict comprehensions

d = {x[0][0]: sum(list(zip(*x))[1]) for x in zip(*lst)}
print(d) # {'user1': 61, 'user2 ': 68}
Вернуться на верх