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

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'}

以上是关于用于解析没有逗号的解析的字符串的主要内容,如果未能解决你的问题,请参考以下文章

php解析csv时,特定汉字会导致逗号识别不出来

片段(Java) | 机试题+算法思路+考点+代码解析 2023

解析不在逗号之间的空格的快捷方式? [复制]

如何在 PL/SQL 中解析逗号分隔的字符串? [复制]

Relay.js 没有正确解析组合片段

华为OD机试 - 计算最大乘积(Java) | 机试题+算法思路+考点+代码解析 2023