Make a new list depending on group number and add scores up as well

Solution:

Use itertools.groupby, and collections.defaultdict:

l=[['Harry',9,1],['Harry',17,1],['Jake',4,1], ['Dave',9,2],['Sam',17,2],['Sam',4,2]]
from itertools import groupby
from collections import defaultdict
l2=[list(y) for x,y in groupby(l,key=lambda x: x[-1])]
l3=[]
for x in l2:
    d=defaultdict(int)
    for x,y,z in x:
       d[x]+=y
    l3.append(max(list(map(list,dict(d).items())),key=lambda x: x[-1]))

Now:

print(l3)

Is:

[['Harry', 26], ['Sam', 21]]

Explanation:

First two lines are importing modules. Then the next line is using groupby to separate in to two groups based on last element of each sub-list. Then the next line to create empty list. Then the next loop iterating trough the grouped ones. Then create a defaultdict. Then the sub-loop is adding the stuff to the defaultdict. Then last line to manage how to make that dictionary into a list.