python - 使用 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:'}
解决方案
您可以使用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
?
推荐阅读
- javascript - 为什么Unity 2018.2 WebAssembly加载间隔只有0%、90%、100%
- php - 从 Woocommerce 设置电子邮件列表中删除未使用的电子邮件
- javascript - 使用 URL.createObjectURL 重建 PDF 后,PDF 已损坏
- javascript - ml5.js styleTransfer 仅适用于 1:1 纵横比?
- cloud-foundry - 向 fluentd 实例添加身份验证,从 Cloud Foundry 应用程序获取系统日志
- c++ - 为什么指向同一内存的多个共享指针会导致内存泄漏?
- r - 在 R 中使用新布局重播记录的绘图
- arp - arp -a 不列出所有设备
- c - 变量位置变化?
- python - 多处理线程池返回 Null 结果