从解析的文本字典。更简单的创作方式?

时间:2014-10-22 08:08:55

标签: 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 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())))

1 个答案:

答案 0 :(得分:2)

风格问题几乎是主观的,我个人的偏好是避免&#34; smart&#34;构造并明确和冗长:

desired_result = {
    'x': int(match.group(1)),
    'y': int(match.group(2)),
    'z': int(match.group(3))
}

当然,如果你有更多的钥匙,这在某些时候会变得非常愚蠢,但我仍然更喜欢对map的理解:

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

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

不需要元组。