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

91 投票
6 回答
112385 浏览
提问于 2025-04-11 09:26

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

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

在Python中,有没有什么内置的类或函数可以把这个字符串转换成字典,就像我手动这样做:

dict = {
    "Name1": "Value1",
    "Name2": "Value2",
    "Name3": "Value3"
}

我查过可用的模块,但似乎找不到合适的东西。


谢谢,我知道怎么自己写相关的代码,但因为这些小的解决方案通常会出问题(比如有人写:Name1='Value1=2';)等,所以我通常更喜欢用一些经过测试的函数。

那我自己来做吧。

6 个回答

5

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,尤其是当我们刚开始学习编程的时候。比如,有人可能在使用一个特定的功能时,发现它没有按照预期工作。这种情况下,了解问题的原因和解决方法就变得非常重要。

通常,解决这类问题的第一步是仔细阅读相关的文档或说明。文档里会详细介绍如何正确使用这个功能,可能还会提供一些示例代码,帮助我们更好地理解。

如果文档没有解决问题,我们可以去一些编程社区,比如StackOverflow,看看其他人是否遇到过类似的问题。在这些社区里,很多经验丰富的程序员会分享他们的解决方案和经验,这对我们来说是一个很好的学习机会。

总之,遇到问题时,不要气馁,先查阅文档,再向社区求助,通常都能找到解决办法。

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

dict(map(lambda x: x.split('='), s1.split(';')))
6

这段代码差不多能实现你想要的功能:

>>> import urlparse
>>> urlparse.parse_qs("Name1=Value1;Name2=Value2;Name3=Value3")
{'Name2': ['Value2'], 'Name3': ['Value3'], 'Name1': ['Value1']}
153

这里没有现成的功能,但你可以用生成器表达式很简单地实现这个。

s= "Name1=Value1;Name2=Value2;Name3=Value3"
dict(item.split("=") for item in s.split(";"))

[编辑] 从你的更新来看,你可能需要处理引号的问题。这会让事情变得复杂,具体取决于你想要的格式是什么(比如接受什么样的引号字符,什么样的转义字符等等)。你可以看看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'}

不过,根据你格式的具体结构,你可能需要自己写一个简单的解析器。

撰写回答