gpt4 book ai didi

python - 将丑陋的字符串(自定义非 json 格式)转换为字典

转载 作者:太空宇宙 更新时间:2023-11-04 00:01:02 25 4
gpt4 key购买 nike

我有这个字符串,我想将其作为字典加载,以便我可以访问每个项目。

my_str = "[
id=xyz-111,
abc= {
item=[
{
a=xyz,
b=123,
c={},
d={
i=[{ip=0.0.0.0/0}]
},
}
]
}
]"

目前我正在使用正则表达式(re library)来获取字符串中任何项目的值,这很有效。

有没有更简洁的方法将这个字符串转换成字典?我试过 json.loads()ast 都不起作用。

预期结果:

my_dict = {
'id':'xyz-111',
'abc': {
'item':[
{
'a':'xyz',
'b':123,
'c':{},
'd':{
'i':[{'ip':'0.0.0.0/0'}]
},
}
]
}
}

最佳答案

好吧,这很丑陋,但它可以为您提供一个创建更高效​​解决方案的起点。基本上,与第一个替换的一系列替换包括切片和用 dict 闭包替换左括号和右括号。然后,ast.literal_eval 转换为 dict。

import ast
import re

s = """
[
id=xyz-111,
abc= {
item=[
{
a=xyz,
b=123,
c={},
d={
i=[{ip=0.0.0.0/0}]
},
}
]
}
]
"""

a = '{' + re.sub(r'=', r':', re.sub(r'\s+', '', s))[1:-1] + '}'
b = re.sub(r'([{}[\]:,])([^{}[\]:,])', r'\1"\2', a)
c = re.sub(r'([^{}[\]:,])([{}[\]:,])', r'\1"\2', b)
d = ast.literal_eval(c)

print(d)
# {'id': 'xyz-111', 'abc': {'item': [{'a': 'xyz', 'b': '123', 'c': {}, 'd': {'i': [{'ip': '0.0.0.0/0'}]}}]}}
  • a 删除所有空格,将 = 替换为 :,并将外部 [] 替换为 {}(删除空格是一种生硬的工具,如果数据包含需要保留空格的字符串,则需要更具体地针对)
  • b 在括号、分号或逗号之后插入 ",但后面没有任何这些字符
  • c 在括号、分号或逗号之前插入 ",前面没有任何这些字符
  • d 使用 ast.literal_eval 将字符串转换为字典,这比 json.loads
  • 稍微宽容一些

关于python - 将丑陋的字符串(自定义非 json 格式)转换为字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55738300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com