Summing up a list in a dictionary

Question:

I want to sum up the points inside a For loop.
As you can see in my code, the number of elements (entries) in "points" is different.
Can someone help me to implement this pytonically?

student1 = {‘name’: ‘Hans’, ‘points’: [285, 210, 135, 100, 300]}
student2 = {‘name’: ‘Peter’, ‘points’: [65, 56, 48]}

students = [student1, student2]

for stud in students:
sumpoints = stud[‘points’][0]+stud[‘points’][1]+stud[‘points’][2]

print(sumpoints)]

The print output should look like this:

Hans: 1030
Peter: 169

That’s why I put it in a for loop.

Asked By: sc1919

||

Answers:

If you want the total points of all students, it’ll look something like this:

sumpoints = 0
for stud in students:
    sumpoints += sum(stud['points'])
Answered By: Tanner

The sum function will sum a list without you specifying a size and a list comprehension will apply that to each student.

student1 = {'name': 'Hans', 'points': [285, 210, 135, 100, 300]}
student2 = {'name': 'Peter', 'points': [65, 56, 48]}

students = [student1, student2]

sumpoints = [sum(student['points']) for student in students]
print(sumpoints)

Output is a sum per student

[1030, 169]
Answered By: tdelaney

sum() will sum of iterable of numbers regardless the numbers of element.

You can use dict comprehension to achieve what you need:

EDIT: Changes variable name in dict comprehension for better readability

student1 = {'name': 'Hans', 'points': [285, 210, 135, 100, 300]}
student2 = {'name': 'Peter', 'points': [65, 56, 48]}

students = [student1, student2]

sumpoints = {student['name']: sum(student['points']) for student in students}
print(sumpoints)
for key, val in sumpoints.items(): print(f'{key}: {val}')

# {'Hans': 1030, 'Peter': 169}
# Hans: 1030
# Peter: 169
Answered By: Arifa Chan

What you have

Your current code prints:

169

Explain your code and intentions by comments:

student1 = {'name': 'Hans', 'points': [285, 210, 135, 100, 300]}
student2 = {'name': 'Peter', 'points': [65, 56, 48]}

students = [student1, student2]

# Print a line for each student with his name and the sum of his/her points.
# Example:
# Hans: 1030
# Peter: 169
for stud in students:
    sumpoints = stud['points'][0]+stud['points'][1]+stud['points'][2]  # this will not adjust for varying list-length

print(sumpoints)  # this is outside the for-loop, it only prints the sum of the last student

What is missing?

  • a line printed per student (inside the loop)
  • the name of the student at the beginning of the printed
  • the sum per student should summarize all points not only the first 3
for stud in students:
    # following debug prints can be removed when working correctly
    print(stud['name'])  # see how each student is iterated - a new line
    print(stud['points'])  # see the list varies (length and elements)
    # the demo can be completed by you
    stud_sum = sum([0,1,2]) # sum-function adjusts for varying list-length, it sums up all elements - here a demo list
    print("Name" + ":" +  str(stud_sum))  # inside the for-loop, to print for each student - the name is just a demo
Answered By: hc_dev
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.