0

这感觉应该很明显,但我错过了正确的形式。

给定一个字符串列表,例如

fields = ["format = gatheringnutsinmay", "device = TESTX"]

我正在尝试编写字典理解来制作字段字典:

items = {"format": "gatheringnutsinmay", "device": "TESTX }

我现在有:

_kv_seperator = re.compile(r"\s*=\s*")
items = {fk: fv for f in fields for [fk, fv] in _kv_seperator.split(f)}

但我得到了错误:

_kv_seperator.split(f)

ValueError: too many values to unpack (expected 2)

请指正!

4

5 回答 5

2

您不需要第二个 for 循环,查看字典理解的一种方法如下:

items = {}
for f in fields:
    for [fk, fv] in _kv_seperator.split(f):
        items[fk] = fv

print(items)

当你写:

for [fk, fv] in _kv_seperator.split(f)

你告诉 Python 你期待一个由 2 元组组成的可迭代对象,但实际上

_kv_seperator.split(f) 

只返回一个元组,因此错误:

ValueError: too many values to unpack (expected 2)

您可以改为执行以下操作:

import re

fields = ["format = gatheringnutsinmay", "device = TESTX"]
_kv_seperator = re.compile(r"\s*=\s*")
items = {fk: fv for fk, fv in map(_kv_seperator.split, fields)}

print(items)

或者简单地说:

items = dict(map(_kv_seperator.split, fields))
print(items)

或者,如果您愿意,您可以这样做:

items = {fk: fv for fk, fv in (_kv_seperator.split(f) for f in fields)}
于 2020-04-18T23:06:50.443 回答
1

如果格式是固定的,我建议使用 .split():

fields = ["format = gatheringnutsinmay", "device = TESTX"]
result = {}
for f in fields:
    f = f.split(" = ")
    result[f[0]] = f[1]
print(result)
于 2020-04-18T23:05:21.683 回答
1

如果你想要一个衬里,这会成功:

items = {k:v for k,v in (sp.split(' = ') for sp in fields)}
于 2020-04-18T23:14:25.300 回答
0
items = { i.split('=')[0]:i.split('=')[1] for i in fields}
于 2020-04-18T23:14:21.007 回答
0

您可以使用下面的代码而不是使用 rex :

fields = ["format = gatheringnutsinmay", "device = TESTX"]
items = {f.split(" = ")[0]: f.split(" = ")[1] for f in fields}
items

希望它有所帮助。

于 2020-04-18T23:17:57.660 回答