首页 > 解决方案 > 使用 for 循环遍历嵌套字典

问题描述

我是一个python新手,正在学习字典。我有一个学生名单和他们的成绩,我需要将每个学生映射到他的成绩以进行特定的考试。

我正在使用一个 for 循环来遍历每个学生的姓名,然后使用另一个循环来遍历考试成绩。我的代码在下面,但由于某种原因,我没有得到想要的结果。我希望有人能指出我搞砸的地方。谢谢你。

students = {'Student1': {'Exam1': 80, 'Exam2': 80, 'Exam3': 70},
      'Student2': {'Exam1': 90, 'Exam2': 70, 'Exam3': 65}}

student_grades = {}
for student, exam in students.items():
    student_grades = {student}
    for key,value in exam.items():
       student_grades.update({key + ':', value})

print(student_grades)


#This is what I'd like my result to look like:
({'Student1': {'Exam1': 80}}, {'Student1': {'Exam2': 80}},   {'Student1': {'Exam3': 70}}, {'Student2': {'Exam1': 90}}, {'Student2':   {'Exam2': 70}}, {'Student2': {'Exam2': 65}})

#But this is what it actually looks like:
{65, 'Student2', 90, 70, 'Exam3:', 'Exam1:', 'Exam2:'}

标签: pythondictionary

解决方案


您可以使用for字典上的循环来遍历键。此外,您最终想要的是一个充满小字典的元组。因此student_grades,通过将其设置为空括号来创建一个 Python 元组;您将其设置为空括号的方式{},使其成为一个空的 Python 字典或集合。

students = {'Student1': {'Exam1': 80, 'Exam2': 80, 'Exam3': 70},
      'Student2': {'Exam1': 90, 'Exam2': 70, 'Exam3': 65}}

student_grades = ()

# Loop through the students, then for each one loop through the exams
for student in students:
    for exam in students[student]:
        # Now make a new entry for student_grades, then add this entry
        new_dict = {student: {exam: students[student][exam] }}
        student_grades += (new_dict,)

print(student_grades)

在这种情况下,我个人更喜欢列表([])而不是元组(())。Python 可以让你在运行中的元素中执行 for 循环。因此,这是使用单个命令将所有内容放在一个列表中的一种方法。

as_a_list = [ {student: {exam: students[student][exam]}} for student in students for exam in students[student] ]
print(as_a_list)

编辑(回答评论中的问题):我不确定“空列表作为字典”是什么意思。在 Python 中,列表和字典是两个不同的东西。在“这就是我希望我的结果看起来像:”之后的原始示例中,您有一个元组,而不是字典(也不是列表)。请注意,整个内容都用括号括起来,而不是大括号。如果你也想student_grades成为一本字典,那么下一个问题就是你想要它的键是什么。如果您希望它们成为学生姓名,那么您希望它与名为 的初始字典有何不同student


推荐阅读