用破折号分隔的字符串创建多级字典(未知深度)

问题描述 投票:0回答:1

对于“健康检查”项目,我正在尝试根据写入文本文件的字符串创建多维数组。

目前,我可以使用这样的单个变量:

someParameter1 = someValue1 # With some comments
someParameter2 = someValue2 # With some other comments

这将被翻译成字典:

ini['someParameter1'] = 'someValue1'
ini['someParameter2'] = 'someValue2'

现在,我刚刚添加了对表的检查,因此,我使用二维数组,它是通过像这样的破折号分隔的字符串构建的:

someTable-someParameter1 = someValue1 # With some comments
someTable-someParameter2 = someValue2 # With some other comments

这将翻译成两级字典:

ini['someTable']['someParameter1'] = 'someValue1'
ini['someTable']['someParameter2'] = 'someValue2'

为此,我在'='号之前硬编码了两个字段的限制:

# In case the key contains a dash, create a 2-dimensional key
for inikey in list(ini):  # loop thru the ini to find key's with a dash
    if '-' in inikey:
        part1,part2 = inikey.split('-',1)    # <= Only split on the first dash
        try:
            ini[part1][part2] = ini[inikey]
        except KeyError:  # In case ini[part1] does not exist yet
            ini[part1] = {}
            ini[part1][part2] = ini[inikey]

因此,当我在配置文件中有aaa-bbb-ccc-ddd = xyz时,它将转换为ini['aaa']['bbb-ccc-ddd'] = 'xyz'

现在我正在寻找nice

技巧来创建ini['aaa']['bbb]['ccc']['ddd'] = 'xyz',而无需为每个预期的级别编写代码。因此,如果可能的话,还可以使用3、4或=之前的任意数量的单词,创建一个列表,该列表的维数未知,并且需要的深度。

对于“健康检查”项目,我正在尝试根据写入文本文件的字符串创建多维数组。目前,我可以使用这样的单个变量:someParameter1 = ...

python python-3.x
1个回答
2
投票

您可以使用默认字典,并使用默认字典创建它。如果您将其称为Tree,则我们具有递归数据结构:

© www.soinside.com 2019 - 2024. All rights reserved.