Reputation: 89
id, name, assignment#, grade
[1, 'james', '1,', 18.0]
[2, 'alice', '1,', 19.0]
[5, 'jorgen', '1,', 19.8]
[1, 'james', '2,', 19.5]
[2, 'alice', '2,', 22.75]
[3, 'kevin', '2,', 24.75]
[4, 'george', '2,', 23.5]
[5, 'jorgen', '2,', 12.5]
[3, 'kevin', '1,', 15.6]
[4, 'george', '1,', 18.4]
[3, 'kevin', '4,', 18.0]
[4, 'george', '4,', 28.5]
[5, 'jorgen', '4,', 7.5]
[1, 'james', '3,', 21.75]
[2, 'alice', '3,', 25.0]
[3, 'kevin', '3,', 21.25]
[4, 'george', '3,', 18.75]
[5, 'jorgen', '3,', 11.5]
[1, 'james', '4,', 29.4]
[2, 'alice', '4,', 29.4]
This is the split data I have, and I am trying to add the grades and output (id, name, grade). How can I do this? i am supposed to output
1, james: 88.65
2, alice: 96.15
3, kevin: 79.6
4, george: 89.15
5, jorgen: 51.3
Upvotes: 2
Views: 72
Reputation: 155418
Use a defaultdict(float)
to accumulate grades:
from collections import defaultdict
grades = defaultdict(float)
for id, name, assignment, grade in data:
grades[id, name] += grade
# Now output (in order by id to be nice)
for id_name, total in sorted(id_grades.items()):
id, name = id_name
print('%d, %s: %.2f' % (id, name, total))
Upvotes: 0
Reputation: 2806
Assuming it's a matrix:
M = [[1, 'james', '1,', 18.0],
[2, 'alice', '1,', 19.0],
[5, 'jorgen', '1,', 19.8],
[1, 'james', '2,', 19.5],
[2, 'alice', '2,', 22.75],
[3, 'kevin', '2,', 24.75],
[4, 'george', '2,', 23.5],
[5, 'jorgen', '2,', 12.5],
[3, 'kevin', '1,', 15.6],
[4, 'george', '1,', 18.4],
[3, 'kevin', '4,', 18.0],
[4, 'george', '4,', 28.5],
[5, 'jorgen', '4,', 7.5],
[1, 'james', '3,', 21.75],
[2, 'alice', '3,', 25.0],
[3, 'kevin', '3,', 21.25],
[4, 'george', '3,', 18.75],
[5, 'jorgen', '3,', 11.5],
[1, 'james', '4,', 29.4],
[2, 'alice', '4,', 29.4]]
grades_for_james =sum([row[3] for row in M if row[1]=='james' ])
Upvotes: 2