You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 22:18:32