我想在字典中每个时期保存我的成绩
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}
答案 0 :(得分:1)
两个内部循环看似错误,您想要遍历句点同时,而不是遍历每个等级的所有句点(这是将循环嵌套在另一个循环中所造成的效果。)< / p>
假设有相同数量的成绩和句号,建立字典的正确方法是:
final = dict(zip((x.get_text() for x in periods), grades))
执行此操作的“长”方式(根据评论中的要求)将是:
final = {}
for period, grade in zip(periods, grades):
final[period.get_text()] = grade
另请注意,最后您只会获得一个包含最后一个类的句点/成绩的字典,因为您正在为每个类重复并创建一个新字典并丢弃以前的字典。
答案 1 :(得分:0)
我找到了一种方法,可以将每个句号和成绩添加到词典中。
final={}
for classes in soup.find_all("div", "AssignmentClass"):
grades = classes.findAll("span")[5]
periods = classes.findAll("a", "asmt_link")
for p, g in zip(periods, grades):
final.setdefault(p.get_text(), g)
<强>结果:强>
{'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}
使用 .setdefault()解决了我的问题。