如何将含字符串化嵌套列表的列表处理为目标格式?
处理包含字符串化嵌套列表的Python列表
给定初始列表:
before = ['Vicente, Piura, Perú', 'Escobar, Buenos Aires, Argentina', "['San Juan, Argentina', 'California, Estados Unidos de América']"]
需要将其中的字符串化嵌套列表展开,得到目标列表:
after = ['Vicente, Piura, Perú', 'Escobar, Buenos Aires, Argentina', 'San Juan, Argentina', 'California, Estados Unidos de América']
方法一:使用ast.literal_eval(推荐)
ast.literal_eval可以安全解析字符串形式的Python数据结构,不会执行恶意代码,是处理这类场景的最优解。
代码实现:
import ast before = ['Vicente, Piura, Perú', 'Escobar, Buenos Aires, Argentina', "['San Juan, Argentina', 'California, Estados Unidos de América']"] after = [] for item in before: # 尝试解析为列表,失败则直接保留原元素 try: parsed = ast.literal_eval(item) if isinstance(parsed, list): after.extend(parsed) else: after.append(item) except (ValueError, SyntaxError): after.append(item) print(after)
该方法能适配各种合法的字符串化列表格式,包括包含特殊字符的元素。
方法二:字符串手动处理(仅适用于简单固定格式)
如果不想引入模块,可以通过字符串替换和分割实现,但局限性大,仅适合元素内无, (逗号加空格)的场景:
before = ['Vicente, Piura, Perú', 'Escobar, Buenos Aires, Argentina', "['San Juan, Argentina', 'California, Estados Unidos de América']"] after = [] for item in before: if item.startswith('[') and item.endswith(']'): # 移除首尾括号,分割元素后清理引号和空格 elements = [elem.strip().strip("'\"") for elem in item[1:-1].split(', ')] after.extend(elements) else: after.append(item) print(after)
注意:若元素本身包含, ,比如'New York, NY, Estados Unidos',这种方法会错误拆分元素,因此优先选择第一种方案。
内容的提问来源于stack exchange,提问作者Colton Seegmiller
相关产品推荐
相关产品推荐

