如何在Python中将Zapier输出的列表列表转为键值对集合?
问题
我在用Zapier工具基于每小时刷新的Google Sheet做工作流自动化,Zap输出的原始行数据格式如下:
list = [["header_1", "header_2", "header_3"], ["uuid_1", "first_timestamp_1", "second_timestamp_1"], ["uuid_2", "first_timestamp_2", "second_timestamp_2"], ["uuid_3", "first_timestamp_3", "second_timestamp_3"]]
需要把这些数据转成JSON对象集合,以第一个列表元素为键,其余元素为对应值,理想输出是:
[ { "header_1":"uuid_1", "header_2":"first_timestamp_1", "header_3":"second_timestamp_1" }, { "header_1":"uuid_2", "header_2":"first_timestamp_2", "header_3":"second_timestamp_2" }, { "header_1":"uuid_3", "header_2":"first_timestamp_3", "header_3":"second_timestamp_3" } ]
我写了下面的Python代码,但执行时报错AttributeError: 'str' object has no attribute 'append',不确定思路对不对,求解决建议:
list = [["header_1", "header_2", "header_3"], ["uuid_1", "first_timestamp_1", "second_timestamp_1"], ["uuid_2", "first_timestamp_2", "second_timestamp_2"], ["uuid_3", "first_timestamp_3", "second_timestamp_3"]] row_count = len(list) if row_count == 1: print(null) else: header = list[0] output = [] for element in list: output.append(dict()) for i in element: j = 0 while j < len(header): key = header[j] value = i output = """+key+""":"""+value+""" j = j+1
问题分析与修复方案
错误原因
- 变量类型被覆盖:初始
output是列表,但后续代码把它赋值成了字符串,再调用output.append()就会触发类型错误。 - 循环逻辑错误:外层循环遍历了包括表头在内的所有行,应该只处理表头之后的数据;嵌套循环的结构完全混乱,没有正确将键值对关联到对应的字典中。
- 语法错误:Python里空值是
None不是null;手动拼接键值对的写法不符合Python语法规范。
修复后的代码
import json # 避免用list作为变量名,防止覆盖内置类型 data = [["header_1", "header_2", "header_3"], ["uuid_1", "first_timestamp_1", "second_timestamp_1"], ["uuid_2", "first_timestamp_2", "second_timestamp_2"], ["uuid_3", "first_timestamp_3", "second_timestamp_3"]] row_count = len(data) if row_count == 1: print(None) else: headers = data[0] output = [] # 只遍历表头之后的行数据 for row in data[1:]: # 用zip快速配对表头与行数据,生成字典 row_dict = dict(zip(headers, row)) output.append(row_dict) # 输出格式化后的JSON字符串 print(json.dumps(output, indent=2))
关键说明
- 避免内置类型冲突:不要用
list作为变量名,改用data这类通用名称,防止覆盖Python内置的list类型。 - 高效生成字典:
zip(headers, row)可以将表头和对应行的元素一一配对,再通过dict()直接生成目标字典,比嵌套循环简洁高效。 - JSON格式化输出:导入
json模块后,json.dumps()能直接把列表转成符合要求的格式化JSON字符串,无需手动拼接。 - 边界处理:当只有表头行时,输出Python的空值
None,符合需求逻辑。
内容的提问来源于stack exchange,提问作者FrenchConnections
相关产品推荐
相关产品推荐

