Python遍历循环修改字典值时赋值错误问题求助
问题分析与解决
错误原因
你的代码逻辑存在核心问题:外层循环每处理一个年份i,内层又完整遍历了一遍lines列表,每次都用当前的j覆盖years[i]的值。这就导致每个年份的最终值都会被lines的最后一个元素覆盖,自然所有年份对应的值都变成了最后一支球队。另外years.update({i:i})这行完全多余,后续赋值会直接覆盖它。
修正方案
要实现年份与lines元素一一对应,需要先生成有效年份列表(排除1904、1994),再将其与lines的元素配对赋值,避免嵌套循环的覆盖问题。
修正后的代码:
lines = a.readlines() # 清理每行末尾的换行符,避免值中带多余的换行 lines = [line.strip() for line in lines] # 生成1903-2021之间的有效年份(排除1904和1994) valid_years = [] for year in range(1903, 2022): if year not in (1904, 1994): valid_years.append(year) # 配对年份与球队,构建字典 years = {} for year, team in zip(valid_years, lines): years[year] = team # 也可以用更简洁的字典推导式 # years = {year: team for year, team in zip(valid_years, lines)}
说明
- 先处理
lines的换行符:readlines()会保留每行末尾的\n,用strip()可以去掉这些多余字符。 - 生成有效年份列表:确保年份数量和
lines的元素数量完全匹配(对应每一届世界大赛的冠军)。 - 用
zip()配对:将有效年份和球队一一对应,每个年份只会被赋值一次,彻底避免覆盖问题。
内容的提问来源于stack exchange,提问作者ChangJun Kim
相关产品推荐
相关产品推荐

