Pythonで下記関数を作ると、次のようなエラーが発生しました。

alice = {
"name": "Alice", 
"homework": [100.0, 92.0, 98.0, 100.0],
"quizzes": [82.0, 83.0, 91.0],
}

def average(numbers):
    total = float(sum(numbers))
    total = total / len(numbers)
    return total

def get_average(student):
    homework = average(student["homework"])
    quizzes = average(student["quizzes"])
    total = float(0.5*homework + 0.5*quizzes)
    return total

student = alice #test alice
print(get_average(alice))  #correctly works

def get_class_average(students):
    results = []
    for student in students:
        results.append(get_average(student))
    return average(results)

students = alice #test alice
print(get_class_average(students)) #error 

Traceback (most recent call last):
File "", line 28, in
File "", line 24, in get_class_average
File "", line 13, in get_average
TypeError: string indices must be integers

27行目のaliceを、[alice]に変更したらうまく動作するようになりました。

双方をPythonTutor で比較確認したところ、Step 27においてリストが作られるかどうかが違っており、またaliceの方ではStep 31のfor文実行時に、get_class_averagestudentに辞書の文字列キーがひとつ入ってしまっていました。

そこで質問なのですが、どうして19行目ではget_averagealiceで動作したのに、28行目のget_class_averageから呼び出したget_averageにおいてaliceでは文字列が入ってしまい、うまく動かないのでしょうか。for文に関係していると思うのですが、よくわかりません。