Python拆分3个||分隔的CSV列生成字典列表的实现方法
解决方案
核心逻辑是使用zip函数同步遍历三个拆分后的列表,按位置匹配元素生成字典即可,完整实现如下:
完整处理代码
from collections import OrderedDict def process_csv_row(row: OrderedDict): # 校验当前行是否包含全部需要处理的目标列 target_columns = {"buttons", "clicked", "id"} if not target_columns.issubset(row.keys()): return [] # 拆分三个目标列(可替换为你已经实现的拆分逻辑) button_list = [item.strip() for item in row["buttons"].split("||")] clicked_list = [item.strip() for item in row["clicked"].split("||")] id_list = [item.strip() for item in row["id"].split("||")] # 可选:校验三个列表长度一致,避免数据异常导致错位 if len(button_list) != len(clicked_list) or len(button_list) != len(id_list): raise ValueError("当前行三个目标列的元素数量不匹配") # 合并生成目标列表 button_choices = [] for btn_text, clicked_str, btn_id in zip(button_list, clicked_list, id_list): button_choices.append({ "button": btn_text, "clicked": clicked_str.upper() == "TRUE", "id": btn_id }) return button_choices
效果测试
用你给出的示例输入测试:
# 模拟CSV读取到的行数据 test_row = OrderedDict({ "buttons": "choice 1 || choice 2 || choice 3", "clicked": "TRUE || FALSE || FALSE", "id": "choice 1 id|| choice 2 id || choice 3 id", "dynamic_col1": "其他无需处理的字段", "dynamic_col2": 123 }) result = process_csv_row(test_row) print(result)
输出结果符合要求:
[ {'button': 'choice 1', 'clicked': True, 'id': 'choice 1 id'}, {'button': 'choice 2', 'clicked': False, 'id': 'choice 2 id'}, {'button': 'choice 3', 'clicked': False, 'id': 'choice 3 id'} ]
注意事项
- 布尔值转换逻辑可根据实际CSV存储规则调整,若点击状态存储为
1/0,将clicked的赋值逻辑改为clicked_str == "1"即可 - 若你的拆分逻辑已经做了去空格处理,直接替换代码中拆分部分的逻辑即可,不影响后续合并流程
内容的提问来源于stack exchange,提问作者yulGM
相关产品推荐
相关产品推荐

