首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非标准分裂

问非标准分裂
EN

Stack Overflow用户
提问于 2016-07-01 05:45:43
回答 4查看 57关注 0票数 0

我的字符串值类似于:

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

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-07-01 05:54:09

您可以将字符串拆分为'-‘,然后再添加'-’返回。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2016-07-01 05:57:01

我可以告诉你怎么做。去掉引号和外括号。然后使用空格拆分字符串。迭代所获得的列表,并检查是否有任何括号。对开始括号的数量进行计数,将所有列表项作为字符串连接到每个此类项目之间,直到遇到相同数量的结束括号为止。其余项目保持原样。你可以试着实现它。如果你遇到任何问题,我会帮你处理代码。

@chong的回答是一种更清晰的方式。

票数 0
EN

Stack Overflow用户

发布于 2016-07-01 06:13:59

使用正则表达式:

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

使用@崇唐的观点:

代码语言:javascript
复制
>>> dict(('-' + b).strip().split(maxsplit=1) for b in a[1:-1].split('-') if b)
{'-sfdfj': 'aidjf', '-dugs': 'jfdsif', '-usda': '[[s dfdsf sdf]]'}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38137882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档