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
相关产品推荐
相关产品推荐

