더북(TheBook)
from collections import defaultdict
class BySubjectGradebook:
    def __init__(self):
        self._grades = {}                      # 외부 dict
        
    def add_student(self, name):
        self._grades[name] = defaultdict(list) # 내부 dict

    def report_grade(self, name, subject, grade):
        by_subject = self._grades[name]
        grade_list = by_subject[subject]
        grade_list.append(grade)
        
    def average_grade(self, name):
        by_subject = self._grades[name]
        total, count = 0, 0
        for grades in by_subject.values():
            total += sum(grades)
            count += len(grades)
        return total / count