非标准拆分

2024-10-02 08:19:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有如下字符串值:

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

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

主语a={'-sfdfj':'aidjf'、'-dugs':'jfdsif'、'-usda':'[[s dfdsf sdf]]'}

如果不是最后一个值('[[s dfdsf sdf]]',它包含空格,这将非常简单。否则,我只会去掉外括号并拆分“a”,然后将结果列表转换为dict_a,但遗憾的是,现实并不在我这边。 即使我得到这样的名单:

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

这就够了。 任何帮助都将不胜感激。你知道吗


Tags: 字符串列表字典字符dict括号空格sdf
3条回答

您可以将字符串拆分为“-”,然后再将“-”添加到后面。你知道吗

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

我可以告诉你一个办法。 去掉引号和外括号。然后使用空格拆分字符串。遍历获得的列表并检查是否有任何左括号。记下开始方括号的数量,将所有列表项连接为一个字符串,每个项目之间留有空格,直到遇到相等数量的结束方括号。其余项目保持原样。你可以试着实现它。如果你遇到任何问题,我会帮你处理代码。你知道吗

@冲的回答是一个更整洁的方式。你知道吗

使用正则表达式:

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

相关问题 更多 >

    热门问题