Python在append参数内使用for循环生成动态读数键导出JSON问题
问题背景
现有基础代码如下:
instrument = 'instrument_name' serial_no = 'instrument_serialNo' list1 = [] # 该列表包含数量未知的元素(读数数据) number_elements = len(list1)
另有其他代码负责将符合预设要求的读数添加到list1中,最终得到元素数量未知的读数列表,需要将这些数据整理后写入JSON文件,最终结构化数据对应的格式如下:
instrument name | instrument serial number | reading 1| reading 2| reading 3 ...ect
你尝试通过在字典字面量内直接写for循环批量生成读数键值对,代码如下:
instrument_data = [] instrument_data.appent({ 'Instrument Name' : instrument, 'Instrument Serial Number' : serial_no, for x in range(1, number_elemensts + 1): 'reading {}'.format(x) : list1[x - 1] })
存在的问题
- 存在两处低级拼写错误:列表追加方法
append误写为appent,变量名number_elements误写为number_elemensts - Python语法不允许在字典字面量的括号内直接写
for循环语句,这是代码报错的核心原因
正确实现方案
你可以通过字典推导式+字典解包的方式实现动态生成读数键值对,也可以直接用enumerate遍历读数列表,不需要额外计算元素数量:
方案1:字典解包写法(最简洁)
import json instrument_data = [] # 此处list1已经被其他代码填充完读数,下面为示例测试数据 list1 = [12.3, 45.6, 78.9, 101.2] instrument_data.append({ 'Instrument Name': instrument, 'Instrument Serial Number': serial_no, # 用**解包字典推导式生成的读数键值对 **{f'reading {idx+1}': val for idx, val in enumerate(list1)} }) # 写入JSON文件 with open('instrument_data.json', 'w', encoding='utf-8') as f: json.dump(instrument_data, f, indent=4, ensure_ascii=False)
方案2:先建基础字典再更新(可读性更高)
如果你觉得解包写法不好理解,可以先创建包含基础信息的字典,再循环更新读数键值对:
import json instrument_data = [] # 此处list1已经被其他代码填充完读数,下面为示例测试数据 list1 = [12.3, 45.6, 78.9, 101.2] # 先创建基础信息字典 data_item = { 'Instrument Name': instrument, 'Instrument Serial Number': serial_no } # 循环添加读数 for idx, val in enumerate(list1): data_item[f'reading {idx+1}'] = val instrument_data.append(data_item) # 写入JSON文件 with open('instrument_data.json', 'w', encoding='utf-8') as f: json.dump(instrument_data, f, indent=4, ensure_ascii=False)
内容的提问来源于stack exchange,提问作者nkosi.nuz
相关产品推荐
相关产品推荐

