Python 从解析文本中提取字典。更简单的创建方法?

Python 从解析文本中提取字典。更简单的创建方法?,python,regex,parsing,dictionary,Python,Regex,Parsing,Dictionary,假设你有一个可怕的长文本。文本中有可由以下正则表达式解析的加速度值。您希望从文本中获取值(如果您有更好的方法,则不必使用该正则表达式),并且希望结果是一个将字符串与整数匹配的字典 对于部分由非python程序员管理的代码库来说,示例代码看起来有点过于复杂: import re long_text = "<an awful long text>Accel X, Y, Z: -39mg, 7mg, 789mg<which is not necessarily separated b

假设你有一个可怕的长文本。文本中有可由以下正则表达式解析的加速度值。您希望从文本中获取值(如果您有更好的方法,则不必使用该正则表达式),并且希望结果是一个将字符串与整数匹配的字典

对于部分由非python程序员管理的代码库来说,示例代码看起来有点过于复杂:

import re
long_text = "<an awful long text>Accel X, Y, Z: -39mg, 7mg, 789mg<which is not necessarily separated by line breaks or any kind of brackets>"
match = re.search("Accel X, Y, Z: (-?\d+)mg, (-?\d+)mg, (-?\d+)mg", a)
# described as unreadable by non-python colleagues:
desired_result = dict(zip(("x","y","z"),map(int,match.groups())))
重新导入
long_text=“加速X、Y、Z:-39mg、7mg、789mg”
匹配=重新搜索(“加速度X、Y、Z:(?\d+)毫克、(?\d+)毫克、(?\d+)毫克、(?\d+)毫克”,a)
#被非python同事描述为不可读:
所需的结果=dict(zip((“x”、“y”、“z”),map(int,match.groups())

风格问题几乎都是主观的,我个人的偏好是避免使用“聪明”的结构,并且要明确而冗长:

desired_result = {
    'x': int(match.group(1)),
    'y': int(match.group(2)),
    'z': int(match.group(3))
}
当然,如果你有更多的钥匙,这在某个时候会变得非常愚蠢,但我还是更喜欢理解而不是映射:

result = {k: int(v) for k, v in zip("abcdefgh", match.groups())}
顺便说一句,你的可以简化为

dict(zip("xyz",map(int,match.groups())))

不需要元组。

我喜欢理解部分,也喜欢使用字符串。我不知道为什么我没有想到这个。