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

Python将普通字典转换为指定嵌套结构 解决KeyError报错问题

问题解决

错误原因

  • 嵌套字典的二级键(seq1/seq2/seq3)未设置默认值:你仅通过setdefault为一级键prot配置了默认空字典,但首次访问d[prot][key]时,该seq键不存在于prot对应的字典中,直接调用append方法就会触发KeyError。
  • 变量名不匹配:原字典命名为dic,遍历代码中误写为dico,会先触发NameError。
  • 方法名拼写错误:列表追加方法append被误写为apppend,多了一个p字符,会触发AttributeError。
  • 缺少re模块导入:代码使用了正则相关方法,但未导入re模块。

修复后的完整代码

import re

dic = {'seq1': '(prot1_val1, prot1_val10, prot2_val2, prot3_val3)',
        'seq2': '(prot1_val5)',
        'seq3': '(prot2_val2,prot4_val7)' 
       }
d = {}
for key, value in dic.items():
    # 清理括号、按逗号分割,同时处理多余空格
    items = [i.strip() for i in re.sub('[()]','', value).split(',')]
    for item in items:
        prot, val = item.split('_')
        # 一级键prot默认空字典,二级键key默认空列表,再追加值
        d.setdefault(prot, {}).setdefault(key, []).append(val)
print(d)

运行输出

{
    'prot1': {'seq1': ['val1', 'val10'], 'seq2': ['val5']},
    'prot2': {'seq1': ['val2'], 'seq3': ['val2']},
    'prot3': {'seq1': ['val3']},
    'prot4': {'seq3': ['val7']}
}

与需求的目标结构完全一致。

内容的提问来源于stack exchange,提问作者user1845261

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:06:05