多级字典 Python

-2 投票
1 回答
2249 浏览
提问于 2025-04-20 12:15

我想从一个文件里创建一个多层次的字典,文件内容像这样:

node1     :
 key1 : value1
node2          : 
 key2              :               value2
 key3              :               value3
 key4              :               value4
node3              : 
 key2              :               
  interkey2        :               value
node4          : 
 key2              :               
  interkey2        :               
   moreinterkey    :               value5
  interkey3        :               
   moreinterkey    :               value5

我希望这个字典能保存在内存中,以便可以这样访问:

>>> variable["node1"]["key2"]["interkey2"]
value2

有没有什么好的方法?我现在是逐行读取文件,但我不太清楚怎么根据每个值的层级来设置字典的值。

谢谢,

因为我的问题似乎没有被理解,所以我编辑了一下,想更清楚地表达我想做的事情,但我不知道怎么让它更符合Python的风格:

result = {}
level_keys = []
for line in input_text:
    actual_indent = len(line) - len(line.lstrip(' '))
    splitted_string = line.split(':')
    level_keys = level_keys[:actual_indent]
    level_keys[actual_indent] = splitted_string[0]
    if actual_indent == 0:
        result[level_keys[0]] = splitted_string[1]
    elif actual_indent == 1:
        result[level_keys[0]][level_keys[1]] = splitted_string[1]
    elif actual_indent == 2:
        result[level_keys[0]][level_keys[1]][level_keys[2]] = splitted_string[1]
    elif actual_indent == 3:
        result[level_keys[0]][level_keys[1]][level_keys[2]][level_keys[3]] = splitted_string[1]
return result

希望现在我的问题更清楚了,抱歉之前的表达不够好。

1 个回答

1

与其使用自定义的文件格式,不如试试YAML文件格式,并使用一个大家都熟悉的解析库。比如,PyYAML文档首页上的例子看起来和你的很像。

第一个例子 - 设置:

import yaml
document = """
  a: 1
  b:
    c: 3
    d: 4
"""
print yaml.dump(yaml.load(document))

第一个例子 - 输出:

a: 1
b: {c: 3, d: 4}

撰写回答