Python KeyError问题:遍历列表生成JSON时无法解析字段
解决KeyError并优化SKU遍历解析的方法
嘿,这个KeyError问题很好解决,我来给你拆解下:
错误原因
你定义的payload是个空字典,当第一次循环i=0时,payload[i]也就是payload[0]还不存在——字典没办法直接给一个不存在的键设置属性(或键值对),所以就抛出了KeyError: 0。
最优遍历解析方案
考虑到你是按顺序生成SKU条目,用列表来存储payload会更合适——列表天然支持按顺序索引访问,而且后续转JSON也非常方便。这里给你两种优化后的写法:
写法1:修复原while循环逻辑
index = 38 payload = [] # 把字典改成列表,更适配顺序存储场景 i = 0 while i < Number_SKUs: SKU_size = 2 # 提取当前SKU片段 sku_segment = Mbody[index:(index + SKU_size*2)] # 将SKU信息封装成字典,添加到列表中 payload.append({"sku": sku_segment}) print(sku_segment) # 更新索引和循环变量 index += SKU_size * 2 i += 1
写法2:更Pythonic的for循环
用for循环替代while,代码更简洁易读,还不用手动维护循环变量i:
index = 38 SKU_size = 2 payload = [] # 直接循环指定次数 for _ in range(Number_SKUs): sku_segment = Mbody[index:index + SKU_size * 2] payload.append({"sku": sku_segment}) print(sku_segment) index += SKU_size * 2
如果你坚持要用字典存储
那每次循环时需要先给payload[i]初始化一个空字典,再进行赋值:
index = 38 payload = {} i = 0 while i < Number_SKUs: SKU_size = 2 payload[i] = {} # 先创建当前索引对应的空字典 payload[i]["sku"] = Mbody[index:(index + SKU_size*2)] index += SKU_size * 2 print(payload[i]["sku"]) i += 1
后续转JSON的步骤
不管用列表还是字典,后续都可以直接用json模块转成格式化的JSON字符串:
import json json_result = json.dumps(payload, indent=4) # indent参数让JSON格式更美观易读 print(json_result)
额外提醒
记得确保Number_SKUs的数值是合理的,避免index + SKU_size*2超出Mbody的长度,不然会触发索引越界错误哦。
内容的提问来源于stack exchange,提问作者SomeGuy
相关产品推荐
相关产品推荐

