用于解析没有逗号的解析的字符串

问题描述 投票:-1回答:2

有一个奇怪的字符串表示

“key1:value1:key2:value2:key3:value3 ... keyn:valen”

我需要创建一个dict,当你有逗号时它很容易解决,但是这里只有冒号,你必须每隔一次冒号分割字符串。带有循环或类似内容的代码看起来很难看,所以我想知道你是否可以帮助我使用oneliner。

python string parsing dictionary
2个回答
7
投票

你可以在冒号上分开get an iterator,在自己的迭代器上分割zip。这将很好地配对键和值:

s = 'key1:value1:key2:value2:key3:value3:keyn:valuen'
it = iter(s.split(':'))
dict(zip(it, it))
# {'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'keyn': 'valuen'}

1
投票

如果你对iter(以及我认为优秀的schwobaseggls解决方案)感到不舒服,你可以用几乎相同的方式使用压缩列表切片:

s = 'key1:value1:key2:value2:key3:value3:keyn:valuen'
splitted = s.split(':')

# even_elements = splitted[::2]   - take every 2nd starting at 0th index
# odd_elements  = splitted[1::2]  - take every 2nd startIng at 1st index
k = {k:v for k,v in zip(splitted[::2],splitted [1::2]) }
print(k) 

输出:

{'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'keyn': 'valuen'}

另外,你手工制作字典:

s = 'key1:value1:key2:value2:key3:value3:keyn:valuen'
splitted = s.split(':')
d ={}

# this generates 2-slices from the list and puts them into your dict
for k,v in (splitted[i:i+2] for i in range(0,len(splitted),2)):
    d[k] = v

# or d = { k:v for k, v in (splitted[i:i+2] for i in range(0,len(splitted),2) )}
# or d = dict(splitted[i:i+2] for i in range(0,len(splitted),2) )

print(d)

输出:

{'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'keyn': 'valuen'}
© www.soinside.com 2019 - 2024. All rights reserved.