Python 如何展开列表中字符串形式的嵌套元组得到扁平元组列表
扁平元组列表实现方案
针对列表中「月份字符串 + 字符串格式元组」的嵌套结构,可通过两类高容错方案完成拆解,输出完全匹配目标要求:
方法1:正则提取法(高容错,适配格式异常场景)
该方案不需要将字符串解析为合法Python对象,直接提取需要的数值片段,可自动适配示例中出现的多余引号等格式错误,无代码执行安全风险。
实现代码:
import re # 原始输入列表 lista = [ ('Enero', "('90.0', '229.0', '0.264', '0.672')"), ('Febrero', "('76.0', '262.0', '0.247', '0.821'')"), ('Marzo', "('95.0', '133.0', '0.279', '0.390')"), ] result = [] for month, data_str in lista: # 匹配所有被单引号包裹的数值内容,自动忽略冗余符号 values = re.findall(r"'([^']+)'", data_str) # 解包拼接为扁平元组 result.append((month, *values)) print(result)
运行输出完全匹配预期:
[ ('Enero', '90.0', '229.0', '0.264', '0.672'), ('Febrero', '76.0', '262.0', '0.247', '0.821'), ('Marzo', '95.0', '133.0', '0.279', '0.390') ]
方法2:安全语法解析法(适配规范格式场景)
如果字符串形式的元组完全符合Python语法规则,没有格式错误,可以使用标准库ast的字面量解析方法完成转换,比直接使用eval安全(不会执行字符串中的恶意代码)。
实现代码:
import ast lista = [ ('Enero', "('90.0', '229.0', '0.264', '0.672')"), ('Febrero', "('76.0', '262.0', '0.247', '0.821'')"), ('Marzo', "('95.0', '133.0', '0.279', '0.390')"), ] result = [] for month, data_str in lista: # 预处理修正示例中的多余双单引号格式问题 fixed_str = data_str.replace("''", "'") # 将字符串形式的元组解析为真实元组对象 parsed_data = ast.literal_eval(fixed_str) # 拼接为扁平元组 result.append((month, *parsed_data))
方案选择提示
- 数据来源不可靠、可能存在格式错误时优先选正则提取法,不需要逐行修正语法错误
- 数据完全规范、追求解析逻辑严谨性时选安全语法解析法,避免字符串匹配的漏判问题
内容的提问来源于stack exchange,提问作者Une
相关产品推荐
相关产品推荐

