Python中JSON存储运行选项结构及读取转元组相关问题咨询
问题解答
1. 现有JSON结构合理性分析
你当前的组织方式不合理,同一个数组下的对象使用了无统一规则的自定义键名,后续遍历读取时没有固定规则可遵循,非常容易触发键不存在的错误,就是你现在遇到的问题。
更合理的组织方式是给所有选项对象设置统一的键名,示例如下:
"opts": [ { "name": "one_option", "value": "value_one" }, { "name": "two_option", "value": "value_two" } ]
这种结构统一规范,后续处理不会出现键匹配失败的问题。
2. 键错误原因说明
你触发KeyError的原因非常明确:遍历opts数组时,第二个元素里根本不存在opt_one和val_one这两个键,它的键是opt_two和val_two,代码读取到第二个元素时直接匹配失败报错。
3. 读取为元组的实现方案
方案1:保留现有JSON结构的写法
如果不想修改现有JSON结构,可以直接提取每个对象的第一个键值对,不需要硬编码键名:
# 读取所有选项组成元组 opts_tuple = tuple(tuple(item.items())[0] for item in config['opts']) # 单独读取任意一个选项为元组,比如读取第二个选项 second_opt_tuple = tuple(config['opts'][1].items())[0]
方案2:使用统一键结构后的写法
如果改成前面提到的统一name/value键的结构,读取代码更清晰稳定:
opts_tuple = tuple((item['name'], item['value']) for item in config['opts']) # 单独读取第一个选项为元组 first_opt_tuple = (config['opts'][0]['name'], config['opts'][0]['value'])
内容的提问来源于stack exchange,提问作者user3735871
相关产品推荐
相关产品推荐

