繁体   English   中英

在 Python 中将字符串转换为字典

[英]Convert String to Dict in Python

我正在尝试将以下类型的字符串转换为 Python 中的字典。

'F1=Value1,F2=Value2,F3=[[F4=Value4,F5=Value5]],F6=Value6'

我想让字典像:

{
    'F1': 'Value1', 
    'F2': 'Value2',
    'F3': '[[F4=Value4,F5=Value5]]',
    'F6': 'Value6'
}

如果您将继续使用相同的字符串格式,您可以使用复杂的正则表达式来覆盖各种模式。

以下是我预期的一些模式的正则表达式。 如果这能解决您的问题,请告诉我。 如果没有,请提供有关我的解决方案失败的详细信息:

编辑解释

  1. 第一组(?=F\\d+=\\[).*?(\\]){2,}(?=|,)
    • (?=F\\d+=\\[)匹配字符串以F开头,有一个或多个数字,后面有=[
    • .*?(\\]){2,}尽可能少地匹配字符串,并且在末尾有 2 个或更多]
    • (?=|,)字符串结尾,或者什么都没有
  2. 第二组F\\d.[^,]+
    • 匹配第一组后,很容易找到像F6=Value6这样的字符串。 因为第一组优先于第二组,所以第二组只能匹配剩余的字符串。

代码

string = "F1=Value1,F2=Value2,F3=[[F4=Value4,F5=Value5]],F6=Value6,F7=[[[BC],[AC]]]"
import re
resultset = [ele[0] if ele[0] else ele[-1] for ele in re.findall(r"((?=F\d+=\[).*?(\]){2,}(?=|,))|(F\d.[^,]+)",string)]
print({x[:x.find("=")]:x[x.find("=")+1:] for x in resultset})

输出

{'F6': 'Value6', 'F2': 'Value2', 'F3': '[[F4=Value4,F5=Value5]]', 'F1': 'Value1', 'F7': '[[[BC],[AC]]]'}

编辑:因为当字符串为F1=Value1,F2=Value2,F8=[iD=10,ig=12S],F3=[[F4=Value4,F5=Value5]],F6=Value6,F9=[iD=10,ig=12S],F7=[[[BC],[AC]]]前正则表达式不起作用F1=Value1,F2=Value2,F8=[iD=10,ig=12S],F3=[[F4=Value4,F5=Value5]],F6=Value6,F9=[iD=10,ig=12S],F7=[[[BC],[AC]]]

我将正则表达式更改为((?=F\\d+=\\[).*?(\\])+(?= |,F))|(F\\d.[^,]+) 我们需要一个技巧。 在 string 后添加一个空格

string = "F1=Value1,F2=Value2,F8=[iD=10,ig=12S],F3=[[F4=Value4,F5=Value5]],F6=Value6,F9=[iD=10,ig=12S],F7=[[[BC],[AC]]]"
import re
resultset = [ele[0] if ele[0] else ele[-1] for ele in re.findall(r"((?=F\d+=\[).*?(\])+(?= |,F))|(F\d.[^,]+)",string+" ")]
print({x[:x.find("=")]:x[x.find("=")+1:] for x in resultset})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM