【问题标题】:Print a value from a nested dictionary if a prior condition is true如果先验条件为真,则从嵌套字典中打印一个值
【发布时间】:2020-02-12 10:14:04
【问题描述】:

这里的目标是打印出所有平均作业分数超过 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])

【问题讨论】:

  • print(student['id']) ?

标签: python loops dictionary nested


【解决方案1】:

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

【讨论】:

  • 这比我想象的要简单得多。谢谢你的解释。
【解决方案2】:

非常好!问题出在你的最后一行。您正在检查:

"id" in students.values())

这是student.values() 的列表:

["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)]}]

让我们花点时间来评估一下该语句的作用。为简化起见,我们将使用:

a = 5
b = [1, 2, 3, 4, 5]
print(a in b)

这段代码也可以写

for x in b:
    if a == x:
        print(True)
print(False)

现在,您正在检查字符串 "id" 是否在嵌套字典列表中。它不是!相反,您想访问 student 字典中的 "id" 键:

student["id"]

总而言之:

print(student["id"])

然后是完整代码:

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

【讨论】:

  • 好吧,这更有意义。感谢您走过它。看看我哪里出错了,这对我很有帮助。
猜你喜欢
  • 2020-08-10
  • 2021-07-25
  • 2019-08-19
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
相关资源
最近更新 更多