You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将大括号包裹的字符串数据转换为Python列表或字典?

解决方法

要把这种非标准格式的数据集转换成Python可直接使用的列表,核心思路是先将文本格式修正为Python能识别的语法,再用ast.literal_eval()解析(比eval()更安全)。具体步骤如下:

步骤1:格式修正

先对原始文本做三次替换,把非Python语法的结构转成合法结构:

  1. 把所有大括号{}替换成列表用的方括号[]
  2. 把范围格式..替换成Python列表的逗号分隔符,
  3. 把单独的*替换成带引号的字符串'*'

步骤2:给字符串自动加引号

用正则表达式匹配所有非纯数字的字符序列(比如0-0:14.0.1.255),自动给它们加上单引号,确保符合Python字符串语法。

完整代码实现

import re
import ast

# 原始数据
raw_data = """{{1,{{1,6,0-0:14.0.1.255,4,*},{1,6,0-0:14.0.2.255,4,*},{2,70,0-1:96.3.10.255,[1..2],0}}},{2,{{1,6,0-0:14.0.1.255,4,*},{1,6,0-0:14.0.2.255,4,*},{2,70,0-1:96.3.10.255,[1..2],0}}},{3,{{1,6,0-0:14.0.1.255,4,*},{1,6,0-0:14.0.2.255,4,*},{2,70,0-1:96.3.10.255,[1..2],0}}},{4,{{1,6,0-0:14.0.1.255,4,*},{1,6,0-0:14.0.2.255,4,*},{2,70,0-1:96.3.10.255,[1..2],0}}}}"""

# 步骤1:替换非Python语法结构
processed = raw_data.replace('{', '[').replace('}', ']')
processed = processed.replace('..', ', ')
processed = processed.replace('*', "'*'")

# 步骤2:给非数字字符串加引号
def quote_non_numbers(match):
    text = match.group(0)
    return text if text.isdigit() else f"'{text}'"

processed = re.sub(r'[a-zA-Z0-9\-:\.]+', quote_non_numbers, processed)

# 步骤3:解析为Python列表
python_list = ast.literal_eval(processed)

# 验证结果
print(python_list[0])

说明

  • 这段代码会把原始数据转换成嵌套的Python列表,其中字符串类型的元素(比如0-0:14.0.1.255、*)都被正确包裹引号,数字保持原样,[1..2]被转成[1, 2]。
  • 如果需要转换成字典,可以在解析后进一步处理,比如把每个顶层元素(比如[1, [...]])转成{1: [...]}的结构。

内容的提问来源于stack exchange,提问作者YoloCast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 03:27:26