不是标准拆分

时间:2016-07-01 05:45:44

标签: python

我的字符串值如下:

a ='[ - sfdfj aidjf -dugs jfdsif -usda [[s dfdsf sdf]]]'

我想将“a”转换为字典:带有前面“ - ”字符的字符串应该是键,空格后面应该是前面的键的值。 如果我们使用“a”,那么我想要的是生成的字典,如:

dict_a = {' - sfdfj':'aidjf',' - dugs':'jfdsif',' - usda':'[[s dfdsf sdf]]'}

如果不是最后一个值('[[s dfdsf sdf]]'),这将很简单,它包含空格。否则我只是剥离外部括号并拆分“a”,然后将结果列表转换为dict_a,但唉现实不在我身边。 即使我得到如下列表:

list_a = [' - sfdfj','aidjf',' - dugs','jfdsif',' - usda','[[s dfdsf sdf]']

这就足够了。 任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

您可以将字符串拆分为' - '然后添加' - '回来。

a = '[-sfdfj aidjf -dugs jfdsif -usda [[s dfdsf sdf]]]'
a = a[1:-1]    # get ride of the start and end []
sections = a.split('-')
dict_a = {}
for s in sections:
    s = s.strip()
    if len(s) == 0:
        continue
    key_value = s.split(' ')   # split key value by space
    key = '-' + key_value[0]         # the first element is key
    value = ' '.join(key_value[1:])    # the lefe are value
    dict_a[key] = value

答案 1 :(得分:0)

我可以告诉你一个方法来解决它。 剥去引号和外括号。然后使用空格分割字符串。迭代获得的列表并检查任何左括号。保持开括号的数量,将所有列表项连接为每个此类项之间有空格的字符串,直到遇到相等数量的右括号。其余项目保持原样。你可以尝试实现它。如果您遇到任何问题,我会帮您解决问题。

@ chong的回答是一个更简洁的方法。

答案 2 :(得分:0)

使用正则表达式:

>>> import re
>>> dict(re.findall('(-\S+) ([^-]+)', a[:-1].replace(' -', '-')))
{'-sfdfj': 'aidjf', '-dugs': 'jfdsif', '-usda': '[[s dfdsf sdf]]'}

使用@ ChongTang的想法:

>>> dict(('-' + b).strip().split(maxsplit=1) for b in a[1:-1].split('-') if b)
{'-sfdfj': 'aidjf', '-dugs': 'jfdsif', '-usda': '[[s dfdsf sdf]]'}

答案 3 :(得分:0)

你可以试试这个:

import re

a='[-sfdfj aidjf -dugs jfdsif -usda [[s dfdsf sdf]]]'

pattern_key=re.compile(r'(?P<key>-\S+)\s+')
pattern_val=re.compile(r' (?P<val>[^-].*?)( -|\Z)')
d={}

matches=pattern_key.finditer(a)
matches1=pattern_val.finditer(a)

for m,n in zip(matches, matches1):  
    d[m.group('key')]= n.group('val')   

print d