python-3.x 将分隔的键值对字符串解析为dict,同时验证每个项

e5njpo68  于 2023-03-31  发布在  Python
关注(0)|答案(2)|浏览(84)

我正在尝试将一个分隔字符串的键值对解析为dict

# a:1,b:2,c:3
item.split(':') for item in str.split(','))

但是,当字符串包含不正确的格式化值而没有:时,可能会出现这种情况,例如下面示例中的4

# a:1,b:2,c:3,4,e:5

这会导致上面的代码中断,出现错误ValueError: dictionary update sequence element #3 has length 1; 2 is required
我想为这种情况引入一个if条件,这样在迭代过程中,如果遇到任何这样的值,理想情况下应该将其分配给一个默认键,例如x,即x:4
我怎么能把这个条件内联我上面的代码?

xriantvc

xriantvc1#

你可以根据一些众所周知的前缀构造一个默认键,并在其后面附加一个不断增加的数字。类似这样:

def parse_to_dict(s):
    d = dict()
    n = 0
    for t in s.split(','):
        if len(kv := t.split(':')) > 1:
            d[kv[0]] = kv[1]
        else:
            d[f'x_{n}'] = t
            n += 1
    return d

print(parse_to_dict('a:1,b:2,c:3,4,e:5,6'))

输出:

{'a': '1', 'b': '2', 'c': '3', 'x_0': '4', 'e': '5', 'x_1': '6'}

注:

输入字符串与问题中的字符串不同,以显示字符串中的两个错误条目以及输出将受到的影响

jdgnovmf

jdgnovmf2#

您可以将默认值添加到每个项目,并获取split的最后2个结果:

s = 'a:1,b:2,c:3,4,e:5'

d = dict(('X:' + item).split(':')[-2:] for item in s.split(','))

相关问题