我正在尝试将每个时期的成绩保存在字典中
for classes in soup.find_all("div", "AssignmentClass"):
grades = classes.findAll("span")[5]
periods = classes.findAll("a", "asmt_link")
final = {}
for i in grades:
for x in periods:
print "%s: %s" % (x.get_text(), i)
final.update({x.get_text():i})
结果:
Period 1: 97.00000
Period 2: 84.93440
Period 3: 25.83333
Period 4: 86.38029
Period 5: 86.15000
Period 6: 86.87500
Period 7: 66.76380
但是最后final只有最后一个周期{'Period 7': 66.76380}
我想要的:
{'Period 1': 97.00000, 'Period 2': 84.93440, 'Period 3': 25.83333, 'Period 4': 86.38029, 'Period 5': 86.15000, 'Period 6': 86.87500, 'Period 7': 66.76380}
请您参考如下方法:
两个内部循环似乎是错误的,您想同时遍历周期和年级,而不是遍历每个年级的所有周期(这是将一个循环嵌套在另一个循环中造成的效果。)
假设有相同数量的年级和周期,构建字典的正确方法是:
final = dict(zip((x.get_text() for x in periods), grades))
执行此操作的“长”方法(按照评论中的要求)是:
final = {}
for period, grade in zip(periods, grades):
final[period.get_text()] = grade
另请注意,最后您只会得到一个包含最后一节课的期间/成绩的字典,因为您正在迭代并为每个类(class)创建一个新字典并丢弃以前的字典。
