我的字符串值类似于:
a='[-sfdfj aidjf -dugs jfdsif -usda [s dfdsf sdf]]'
我想把"a“转换成字典:前面的字符串"-”字符应该是键,空格后面的应该是前面键的值。如果我们使用的是"a",那么我想要的是得到这样的字典:
dict_a={'-sfdfj':'aidjf','-dugs':'jfdsif','-usda':'[s dfdsf sdf]'}
如果不是最后一个值(‘[ sdf]'),这将很简单,它包含空格。否则,我只需去掉外部括号,将"a“拆分,然后将结果列表转换为dict_a,但遗憾的是,事实并不在我这一边。即使我得到了这样的名单:
list_a=['-sfdfj','aidjf','-dugs','jfdsif','-usda',‘s dfdsf sdf']
这就够了。任何帮助都将不胜感激。
发布于 2016-07-01 05:54:09
您可以将字符串拆分为'-‘,然后再添加'-’返回。
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发布于 2016-07-01 05:57:01
我可以告诉你怎么做。去掉引号和外括号。然后使用空格拆分字符串。迭代所获得的列表,并检查是否有任何括号。对开始括号的数量进行计数,将所有列表项作为字符串连接到每个此类项目之间,直到遇到相同数量的结束括号为止。其余项目保持原样。你可以试着实现它。如果你遇到任何问题,我会帮你处理代码。
@chong的回答是一种更清晰的方式。
发布于 2016-07-01 06:13:59
使用正则表达式:
>>> import re
>>> dict(re.findall('(-\S+) ([^-]+)', a[:-1].replace(' -', '-')))
{'-sfdfj': 'aidjf', '-dugs': 'jfdsif', '-usda': '[[s dfdsf sdf]]'}使用@崇唐的观点:
>>> dict(('-' + b).strip().split(maxsplit=1) for b in a[1:-1].split('-') if b)
{'-sfdfj': 'aidjf', '-dugs': 'jfdsif', '-usda': '[[s dfdsf sdf]]'}https://stackoverflow.com/questions/38137882
复制相似问题