将嵌套元组列表转换为元组列表

2024-05-16 11:30:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串列表,但有些字符串中有一个或两个元组,例如

["('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')

我试过list(map(ast.literal_eval, lst)),但这和之前有人标记为重复的帖子一样有效


Tags: 字符串标记map列表evalast帖子list
1条回答
网友
1楼 · 发布于 2024-05-16 11:30:12

这似乎是上游数据管道的问题。无论是什么原因导致了这种情况,都应该在应该修复的地方

也就是说,以下内容应满足您的需要:

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_eval(...)

import ast
output_entries = list(ast.literal_eval(','.join(entries)))

因为使用ast.literal_eval(...)更安全:https://stackoverflow.com/a/15197698/604048

ast.literal_eval raises an exception if the input isn't a valid Python datatype, so the code won't be executed if it's not.

相关问题 更多 >