| 77 | from collections import defaultdict |
| 78 | |
| 79 | class BySubjectGradebook: |
| 80 | def __init__(self): |
| 81 | self._grades = {} # Outer dict |
| 82 | |
| 83 | def add_student(self, name): |
| 84 | self._grades[name] = defaultdict(list) # Inner dict |
| 85 | |
| 86 | def report_grade(self, name, subject, grade): |
| 87 | by_subject = self._grades[name] |
| 88 | grade_list = by_subject[subject] |
| 89 | grade_list.append(grade) |
| 90 | |
| 91 | def average_grade(self, name): |
| 92 | by_subject = self._grades[name] |
| 93 | total, count = 0, 0 |
| 94 | for grades in by_subject.values(): |
| 95 | total += sum(grades) |
| 96 | count += len(grades) |
| 97 | return total / count |
| 98 | |
| 99 | |
| 100 | print("Example 4") |