我的字符串值如下:
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]']
这就足够了。 任何帮助将不胜感激。
答案 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