我有一个格式如下的字符串:
author="PersonsName" date="1183050420" format="1.1" version="1.2"
我想把它变成一个 Python 字典,a la:
{'author': 'PersonsName', 'date': '1183050420', 'format': '1.1', 'version': '1.2'}
我试过在字符串上使用 re.split 这样做:
attribs = (re.split('(=?" ?)', twikiattribs))
我想我会得到一个像这样的列表:
['author', 'PersonsName', 'date', '1183050420', 'format', '1.1', 'version', '1.2']
然后我可以变成一个字典,但我得到的是:
['author', '="', 'PersonsName', '" ', 'date', '="', '1183050420', '" ', 'format', '="', '1.1', '" ', 'version', '="', '1.2', '"', '']
因此,在我进一步研究 re.split 行之前,通常是否有更好的方法来实现我正在尝试做的事情,和/或如果解决方案涉及 re.split,我如何编写一个正则表达式来实现拆分任何字符串 ="
、"_
(其中 "_"是空格字符)或只是 "
以生成列表键在奇数索引中,值在偶数索引中?
最佳答案
使用re.findall()
:
dict(re.findall(r'(\w+)="([^"]+)"', twikiattribs))
re.findall()
,当呈现具有多个捕获组的模式时,返回一个元组列表,每个嵌套元组包含捕获的组。 dict()
愉快地获取该输出并将每个嵌套元组解释为键值对。
演示:
>>> import re
>>> twikiattribs = 'author="PersonsName" date="1183050420" format="1.1" version="1.2"'
>>> re.findall(r'(\w+)="([^"]+)"', twikiattribs)
[('author', 'PersonsName'), ('date', '1183050420'), ('format', '1.1'), ('version', '1.2')]
>>> dict(re.findall(r'(\w+)="([^"]+)"', twikiattribs))
{'date': '1183050420', 'format': '1.1', 'version': '1.2', 'author': 'PersonsName'}
re.split()
的行为也因捕获组而异;如果分组,您拆分的文本将包含在输出中。比较有和没有捕获组的输出:
>>> re.split('(=?" ?)', twikiattribs)
['author', '="', 'PersonsName', '" ', 'date', '="', '1183050420', '" ', 'format', '="', '1.1', '" ', 'version', '="', '1.2', '"', '']
>>> re.split('=?" ?', twikiattribs)
['author', 'PersonsName', 'date', '1183050420', 'format', '1.1', 'version', '1.2', '']
然而,re.findall()
输出更容易转换为字典。
关于python - 将键 ="value"字符串转换为字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23228352/