Groupby和count/sum与python中的元组列表?

Mat*_*ttE 3 python python-3.x

我有一个元组列表:

data = [('Team1', 'Mark Owen', 40),
('Team1', 'John Doe', 25), 
('Team2', 'Raj Patel', 40), 
('Team3', 'Matt Le Blanc', 30), 
('Team1', 'Rene Russo', 40), 
('Team1', 'Ronald Regan', 40), 
('Team3', 'Dean Saunders', 15), 
('Team2', 'Michael Antonio', 30)]
Run Code Online (Sandbox Code Playgroud)

我想分组(每个元组的索引[0]),计算每个团队中的数字或人数(索引[1])并总结与每个团队相关的数字(索引[2])但我无法想象这个出.到目前为止,我已经尝试使用defaultdict(list)返回一个dict,例如我试过这个按团队分组:

def create_hrs_totals():  
    result = defaultdict(list)
    for k, *v in data():
        result[k] += v
    return dict(result)
Run Code Online (Sandbox Code Playgroud)

但后来我正在努力使用输出来实现我需要使用列表comp或其他...我正在寻找的结果是一个新的列表:

[Team1, 4, 145, 
Team2, 2, 80, 
Team3, 2, 70]
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?

Pat*_*ugh 5

groupby是一个功能itertools,但它不是你想要的.相反,让我们defaultdict从中导入collections

from collections import defaultdict
def data_by_team(data):
    d = defaultdict(lambda: [0,0])
    for team, name, number in data:
        d[team][0] += 1
        d[team][1] += number
    return d
Run Code Online (Sandbox Code Playgroud)

这将返回一个defaultdict将团队名称映射到包含玩家数量和数量总和的列表.