Python字典拆分逗号分隔字符串值解决KeyError问题
问题根因
触发KeyError的核心原因有两点:
- 直接将逗号拼接的多位置字符串(比如
'1B,OF')作为team_pos的键做计数,该拼接字符串从未在team_pos中被定义,匹配失败直接报错 - 原代码
for pos in playerPos[player]是在直接遍历字符串本身,会把'1B,OF'拆成'1'、'B'、','、'O'、'F'单个字符,完全不符合遍历独立位置的预期
修复方案
统一对字典取出的位置值做逗号拆分处理:单位置值拆分后得到长度为1的列表,多位置拼接值拆分后得到对应多个独立位置的列表,后续遍历拆分后的列表做计数即可,完全兼容两种取值格式。
示例字典验证代码
# 禁止用dict作为变量名,会覆盖Python内置字典类 pos_map = {1: 'A', 2: 'A,B', 3: 'C,D'} # 读取键为2的取值,拆分后得到独立位置 pos_value = pos_map[2] pos_list = [p.strip() for p in pos_value.split(',')] # 逐个输出独立值 for pos in pos_list: print(pos)
运行后可分别得到A、B两个独立输出,无匹配错误。
业务代码修复
for player in playerPos: # 拆分当前球员的所有位置为独立值列表,自动兼容单/多位置格式 current_pos_list = [p.strip() for p in playerPos[player].split(',')] for pos in current_pos_list: # 用get方法做计数,键不存在时默认从0开始累加,无需提前初始化所有位置键 team_pos[pos] = team_pos.get(pos, 0) + 1
优化说明
- 拆分时加
strip()是为了兼容逗号前后带空格的格式(比如'1B, OF'),避免多余空格导致键匹配失败 - 用
dict.get(键, 默认值)的方式做累加,不需要提前给team_pos预置所有位置的初始值,从根源避免KeyError
内容的提问来源于stack exchange,提问作者JF44
相关产品推荐
相关产品推荐

