使用for循环遍历嵌套字典

2024-04-18 21:57:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个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:'}

Tags: inforitemsstudent学生likegradesexam
1条回答
网友
1楼 · 发布于 2024-04-18 21:57:38

您可以使用字典上的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中,列表和字典是两种不同的东西。在“This is what I'd my result to look like:”之后的原始示例中,您有一个元组,而不是字典(或列表)。请注意,整个过程是用括号括起来的,而不是大括号。如果你想student_grades也成为一本字典,那么下一个问题就是你想要它的键是什么。如果您想让它们成为学生的名字,那么您希望它与最初的名为student的字典有什么不同呢?你知道吗

相关问题 更多 >