gpt4 book ai didi

python - 如何解析以空格分隔的键值对的字符串?

转载 作者:行者123 更新时间:2023-11-30 23:03:42 24 4
gpt4 key购买 nike

给定一个字符串:

LexicalReordering0= -1.88359 0 -1.6864 -2.34184 -3.29584 0 Distortion0= -4 LM0= -85.3898 WordPenalty0= -13 PhrasePenalty0= 11 TranslationModel0= -6.79761 -3.06898 -8.90342 -4.35544

它包含所需字典的键,以 = 结尾,直到下一个键,其余由空格分隔的值是当前键的值。

请注意,在解析输入字符串之前,键的名称是未知的

生成的字典应如下所示:

{'PhrasePenalty0=': [11.0], 'Distortion0=': [-4.0], 'TranslationModel0=': [-6.79761, -3.06898, -8.90342, -4.35544], 'LM0=': [-85.3898], 'WordPenalty0=': [-13.0], 'LexicalReordering0=': [-1.88359, 0.0, -1.6864, -2.34184, -3.29584, 0.0]}

我可以用这个循环来做到这一点:

>>> textin ="LexicalReordering0= -1.88359 0 -1.6864 -2.34184 -3.29584 0 Distortion0= -4 LM0= -85.3898 WordPenalty0= -13 PhrasePenalty0= 11 TranslationModel0= -6.79761 -3.06898 -8.90342 -4.35544"
>>> thiskey = ""
>>> thismap = {}
>>> for element in textin.split():
... if element[-1] == '=':
... thiskey = element
... thismap[thiskey] = []
... else:
... thismap[thiskey].append(float(element))
...
>>> map
{'PhrasePenalty0=': [11.0], 'Distortion0=': [-4.0], 'TranslationModel0=': [-6.79761, -3.06898, -8.90342, -4.35544], 'LM0=': [-85.3898], 'WordPenalty0=': [-13.0], 'LexicalReordering0=': [-1.88359, 0.0, -1.6864, -2.34184, -3.29584, 0.0]}

但是是否有另一种方法可以从输入字符串中获得相同的字典?(也许是正则表达式或某些Pythonic解析器库?)。

最佳答案

这是一种使用正则表达式库来完成此操作的方法。我不知道它是否更高效,或者即使它可以被描述为Pythonic:

pat = re.compile(r'''([^\s=]+)=\s*((?:[^\s=]+(?:\s|$))*)''')

# The values are lists of strings
entries = dict((k, v.split()) for k, v in pat.findall(textin))

# Alternative if you want the values to be floating point numbers
entries = dict((k, list(map(float, v.split())))
for k, v in pat.findall(textin))

在 Python 2.x 中,您可以使用 map(float, v.split()) 代替 list(map(float, v.split)))

与原始程序不同,此程序允许输入 = 和第一个值之间没有空格。此外,第一个 key= 实例之前的输入中的任何项目都会被静默忽略。明确识别它们并抛出错误可能会更好。

模式说明:

([^\s=]+)                            A key (any non-whitespace except =)
=\s* followed by = and possible whitespace
((?:[^\s=]+(?:\s|$))*) Any number of repetitions of a string
without = followed by either whitespace
or the end of the input

关于python - 如何解析以空格分隔的键值对的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33991032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com