Python - 现有词典列表

时间:2013-07-02 19:04:06

标签: python list dictionary

我是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

2 个答案:

答案 0 :(得分: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感兴趣,请尝试使用mapsum方法:

def get_class_average(student_list):
    return sum(map(get_average, student_list)) / len(student_list)

答案 1 :(得分: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