Skip to main content
 首页 » 编程设计

Python之在for循环中更新字典

2025年05月04日8lovecherry

我正在尝试将每个时期的成绩保存在字典中

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)创建一个新字典并丢弃以前的字典。