Python 将嵌套元组列表转换为元组列表
我有一个字符串列表,但有些字符串中有一个或两个元组,例如Python 将嵌套元组列表转换为元组列表,python,string,list,tuples,Python,String,List,Tuples,我有一个字符串列表,但有些字符串中有一个或两个元组,例如 ["('753.00', '97.00', '863.74', '179.00'), ('123.00', '37.00', '813.74', '139.00')", "('829.37', '381.62', '1022.00', '491.63')"] 我需要这是一个单元组列表,就像 [('829.37', '381.62', '1022.00', '491.63'), ('123.00',
["('753.00', '97.00', '863.74', '179.00'), ('123.00', '37.00', '813.74', '139.00')", "('829.37', '381.62', '1022.00', '491.63')"]
我需要这是一个单元组列表,就像
[('829.37', '381.62', '1022.00', '491.63'), ('123.00', '37.00', '813.74', '139.00'), ('753.00', '97.00', '863.74', '179.00')]
问题是,我无法将以下内容分开,因为它包含在同一报价中
"('753.00', '97.00', '863.74', '179.00'), ('123.00', '37.00', '813.74', '139.00')" into ('753.00', '97.00', '863.74', '179.00'), ('123.00', '37.00', '813.74', '139.00')
我尝试了
列表(map(ast.literal\u eval,lst))
,但这与之前有人标记为重复的帖子一样有效。这似乎是上游数据管道的问题。无论是什么原因导致了这种情况,都应该在应该修复的地方
也就是说,以下内容应满足您的需要:
import ast
entries = [
"('753.00', '97.00', '863.74', '179.00'), ('123.00', '37.00', '813.74', '139.00')",
"('829.37', '381.62', '1022.00', '491.63')"
]
output_entries = list()
for entry in entries:
obj = ast.literal_eval(entry)
if obj and isinstance(obj[0], tuple):
output_entries.extend(obj)
else:
output_entries.append(obj)
print(output_entries)
这张照片是:
[('753.00', '97.00', '863.74', '179.00'), ('123.00', '37.00', '813.74', '139.00'), ('829.37', '381.62', '1022.00', '491.63')]
或者,按照@Samwise在注释中的建议,但使用ast.literal\u eval(…)
:
因为使用ast.literal\u eval(…)
更安全:
ast.literal\u eval
如果输入不是有效的Python数据类型,则会引发异常,因此如果不是,则不会执行代码
list(eval(','.join(lst))
Samwise提出的解决方案是正确的!将eval
切换到ast.literal\u eval
并且@Samwise比我的好。谢谢@Samwise,它给出了预期的输出。
import ast
output_entries = list(ast.literal_eval(','.join(entries)))