用于解析没有逗号的解析的字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于解析没有逗号的解析的字符串相关的知识,希望对你有一定的参考价值。
有一个奇怪的字符串表示
“key1:value1:key2:value2:key3:value3 ... keyn:valen”
我需要创建一个dict,当你有逗号时它很容易解决,但是这里只有冒号,你必须每隔一次冒号分割字符串。带有循环或类似内容的代码看起来很难看,所以我想知道你是否可以帮助我使用oneliner。
答案
你可以在冒号上分开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'}
另一答案
如果你对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'}
以上是关于用于解析没有逗号的解析的字符串的主要内容,如果未能解决你的问题,请参考以下文章