我是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:'}
答案 0 :(得分:2)
您可以在字典上使用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可以让您动态进行元素内的循环。因此,这是一种通过单个命令将所有内容都放在一个列表中的方法。
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
有什么不同吗?