在Python中将分号分隔的字符串拆分为字典

ang*_*son 79 python string dictionary split

我有一个看起来像这样的字符串:

"Name1=Value1;Name2=Value2;Name3=Value3"
Run Code Online (Sandbox Code Playgroud)

Python中是否有一个内置的类/函数来接受该字符串并构造一个字典,就像我这样做了:

dict = {
    "Name1": "Value1",
    "Name2": "Value2",
    "Name3": "Value3"
}
Run Code Online (Sandbox Code Playgroud)

我查看了可用的模块,但似乎找不到匹配的东西.


谢谢,我确实知道如何自己制作相关的代码,但是因为这些小的解决方案通常是我的领域等待发生(即有人写道:Name1 ='Value1 = 2';)等等,所以我通常更喜欢一些预先测试功能.

我会自己做的.

Bri*_*ian 132

没有内置,但你可以通过生成器理解相当简单地完成这个:

s= "Name1=Value1;Name2=Value2;Name3=Value3"
dict(item.split("=") for item in s.split(";"))
Run Code Online (Sandbox Code Playgroud)

[编辑] 在您的更新中,您表明您可能需要处理报价.这确实使事情变得复杂,这取决于你正在寻找的确切格式是什么(接受什么引用字符,什么逃避字符等).您可能需要查看csv模块以查看它是否可以覆盖您的格式.下面是一个例子:(注意,这个例子的API有点笨拙,因为CSV设计用于迭代记录序列,因此我只是查看第一行的.next()调用.适合您的需求):

>>> s = "Name1='Value=2';Name2=Value2;Name3=Value3"

>>> dict(csv.reader([item], delimiter='=', quotechar="'").next() 
         for item in csv.reader([s], delimiter=';', quotechar="'").next())

{'Name2': 'Value2', 'Name3': 'Value3', 'Name1': 'Value1=2'}
Run Code Online (Sandbox Code Playgroud)

根据格式的确切结构,您可能需要编写自己的简单解析器.


Kyl*_*son 5

这接近你想做的事情:

>>> import urlparse
>>> urlparse.parse_qs("Name1=Value1;Name2=Value2;Name3=Value3")
{'Name2': ['Value2'], 'Name3': ['Value3'], 'Name1': ['Value1']}
Run Code Online (Sandbox Code Playgroud)

  • 如果输入中包含“&”或“%”,则会中断。 (2认同)
  • @VishalSingh:StackOverflow 上的大多数访问者都来自 google,因此这里的答案不仅适用于提出问题的原始发帖者。如果我来这里寻找如何在 Python 中解析“以分号分隔的字符串到字典”,那么我的字符串可能包含“&”或“%”——至少,值得一提的是,答案不包含“对这样的字符串不起作用。 (2认同)

小智 5

s1 = "Name1=Value1;Name2=Value2;Name3=Value3"

dict(map(lambda x: x.split('='), s1.split(';')))
Run Code Online (Sandbox Code Playgroud)