首页 > 解决方案 > 如果先验条件为真,则从嵌套字典中打印一个值

问题描述

这里的目标是打印出所有平均作业分数超过 2.0 的学生的学生 ID。现在,当我运行代码时,它只会为每个平均超过 2.0 的学生打印 False。我错过了什么?我试过重新安排订单无济于事。此外,在这里更改字典的格式不是一个选项。

编辑 - 好的第一个问题已经解决,我已经更新了代码。现在,如何将学生 ID 的最终输出放入列表中?我尝试定义标识,然后以列表形式打印,但这只是返回多个单独的列表,而不是一个列表中的所有结果。

students = {"student_1": {"id":12,"Assignments":[("Assignment_1",3),("Assignment_2", 4), ("Assignment_3", 2)]},
            "student_2" :{"id":13,"Assignments":[("Assignment_1",2),("Assignment_2", 4), ("Assignment_3", 2)]},
            "student_3" :{"id":14,"Assignments":[("Assignment_1",0),("Assignment_2", 1), ("Assignment_3", 1)]}}

环形:

for student in students.values():
        scores = [score for (assignment, score) in student["Assignments"]]
        identify = int(student["id"])
        if sum(scores)/len(scores) >=2.0:
            print([identify])

标签: pythonloopsdictionarynested

解决方案


这行代码print("id" in students.values())打印布尔值,因为您正在测试是否students.values()包含“id”。它返回布尔值,并且由于students.values不包含“id”,因此打印为 false。您需要将该行代码更改print(student['id'])为以打印“id”。


推荐阅读