繁体   English   中英

将结构化字符串转换为字典

[英]Convert structured string to dictionary

virtualmin domain-list --multiline返回一个结构化的字符串,我想将其转换为字典的字典列表。

字符串如下所示(有时会缺少值):

do.ma.in.1
    key1a: value1a
    key1b: value1b
    key1c:
    ...
do.ma.in.2
    key2a: value2a
    key2b: value2b
    ...
...

(键:值对在字符串中缩进4个空格)
我想将其转换为以下形式:

[do.ma.in.1: {key1a: value1a, key1b: value1b, key1c: None ...}, 
do.ma.in.2: {key2a: value2a, key2b: value2b, ...}, ...

到目前为止,我确实使用re.split("\\s*(?=^\\S)", str)拆分了字符串,这使我

[do.ma.in.1\n    key1a: value1a\n    key1b: value1b\n    key1c:\n    ..., 
do.ma.in.2\n    key2a: value2a\n    key2b: value2b\n    ..., ...

列表项只是字符串。 (因此没有实际的词典项目)

我从那里去哪里?

如果是我,我不会使用re 我将逐行浏览数据,然后将值分配给适当的dict

from pprint import pprint

data = '''
do.ma.in.1
    key1a: value1a
    key1b: value1b
    key1c:
do.ma.in.2
    key2a: value2a
    key2b: value2b
'''

key = None
result = {}
for line in data.splitlines():
    if not line.strip():
        continue
    line = line.split(':', 1)
    if len(line) == 1:
        key = line[0].strip()
        result[key] = {}
    elif len(line) == 2:
        result[key][line[0].strip()] = line[1].strip()

pprint(result)

结果:

{'do.ma.in.1': {'key1a': 'value1a', 'key1b': 'value1b', 'key1c': ''},
 'do.ma.in.2': {'key2a': 'value2a', 'key2b': 'value2b'}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM