API数据无法正确存入字典:数据重复追加至所有球队列表求助
NFL赛事数据提取问题:数据错误追加到所有球队列表,子类别长度超出预期
问题概述
我从ESPN的NFL 2022赛季第16周赛事API提取32支球队的12项数据用于胜负预测,预先定义了指定格式的字典,运行提取脚本时出现两个异常:
- 子类别列表长度达到60,而非
__init__方法中last_games参数设定的数值 - 目标代码中的数据未存入对应球队的
[team_id - 1]索引位置,而是追加到所有球队的列表中
相关代码片段
fill_game()方法的循环逻辑
for game in range(len(games["items"])): self.fill_home_team(games["items"][game]["$ref"])
数据追加代码
# Add Turnover Differential self.stats[team_id - 1][0]["Turnover Differential"].append(path[10]["stats"][39]["value"]) # Add RedZone Efficiency self.stats[team_id - 1][1]["RedZone Efficiency"].append(path[10]["stats"][12]["value"]) # Add Third Down Attempts self.stats[team_id - 1][2]["Third Down Attempts"].append(path[10]["stats"][29]["value"])
排查方向
字典初始化的引用共享问题
检查球队字典模板的初始化方式:如果所有球队的字典都指向同一个内存对象(比如用[team_template]*32或未做深拷贝的列表推导),那么对任意一个球队的列表执行append操作,所有球队的列表都会同步更新。
修复示例:# 为每个球队创建独立的字典实例 self.stats = [ { "Turnover Differential": [], "RedZone Efficiency": [], "Third Down Attempts": [] # 其他12项数据字段 } for _ in range(32) ] # 或者使用深拷贝 import copy team_template = {"Turnover Differential": [], ...} self.stats = [copy.deepcopy(team_template) for _ in range(32)]循环未限制处理赛事数量
当前循环遍历了所有赛事items,未应用last_games参数的限制,导致处理了超过指定数量的赛事,最终列表长度超出预期。同时需注意:单场比赛包含主客两队,若只处理主队但赛事数量未做限制,会产生远超预期的数据条目。
修复示例:# 仅处理last_games指定数量的赛事 for game in range(min(len(games["items"]), self.last_games)): self.fill_home_team(games["items"][game]["$ref"]) # 若需要统计客队数据,需补充处理客队的逻辑 # self.fill_away_team(games["items"][game]["$ref"])team_id的有效性验证
打印输出team_id的值,确认其是否在1-32的范围内,是否存在重复、错误的ID值。如果team_id始终为固定值,会导致所有数据都追加到同一索引,再结合引用共享问题,就会出现所有球队列表长度异常的情况。赛事数据的归属校验
确认path[10]["stats"]中的数据是否确实属于当前team_id对应的球队,是否错误地将客队数据赋值给主队,或者反之,导致重复统计数据。
内容的提问来源于stack exchange,提问作者Raylo
相关产品推荐
相关产品推荐

