0

我对 Python 完全陌生,这只是行不通。我有这些字典:

lloyd = {
      "name": "Lloyd",
      "homework": [90.0, 97.0, 75.0, 92.0],
      "quizzes": [88.0, 40.0, 94.0],
      "tests": [75.0, 90.0]
}
alice = {
      "name": "Alice",
      "homework": [100.0, 92.0, 98.0, 100.0],
      "quizzes": [82.0, 83.0, 91.0],
      "tests": [89.0, 97.0]
}
tyler = {
      "name": "Tyler",
      "homework": [0.0, 87.0, 75.0, 22.0],
      "quizzes": [0.0, 75.0, 78.0],
      "tests": [100.0, 100.0]
}

我的列表:

students_list = [lloyd, tyler, alice]

我需要列出这些,这样我才能算出所有学生的平均成绩。我得到的错误是

    TypeError: list indices must be integers, not unicode

提前致谢。

编辑:

   def get_class_average(student_list):
       student_one = get_average(student_list["lloyd"])
       student_two = get_average(student_list["alice"])
       student_three = get_average(student_list["tyler"])

       return (student_one + student_two + student_three) /3
4

2 回答 2

3

该错误意味着您错误地遍历列表。尝试像这样迭代:

for student in students_list:
    # perform calculation

在您的代码中使用它

def get_class_average(student_list):
    total = 0
    for student in students_list:
        total += get_average(student)
    return total / len(student_list)

如果您对使用更复杂的 python 感兴趣,请尝试使用mapandsum方法:

def get_class_average(student_list):
    return sum(map(get_average, student_list)) / len(student_list)
于 2013-07-02T19:18:17.387 回答
0

如果你想要一个平面列表:

>>> ns = [n for N in lloyd.values() if isinstance(N, list) for n in N]
>>> ns
[88.0, 40.0, 94.0, 90.0, 97.0, 75.0, 92.0, 75.0, 90.0]
>>> sum(ns) / len(ns)
82.33333333333333
于 2013-07-02T19:13:34.393 回答