如何根据点分隔的层级动态生成多层嵌套字典?
动态生成多层嵌套字典问题
我需要根据变量B中的点分隔符生成多层嵌套字典,最终的键A和值D固定,但B的层级长度不固定。现在写的代码生成的是平级字典,达不到预期的嵌套效果,求解决。
变量定义
A = "key" B = "one.two.three.four" D = "value"
预期输出
{'one': {'two': {'three': {'four': {'key': 'value'}}}}}
我的伪代码
A = "key" B = "one.two.three.four" D = "value" inner_dictionary = {} whole_dictionary = {} lst = B.split('.') length = len(lst) for i in range(length): new = lst[-1] tmp = {A:D} inner_dictionary.update(tmp) val = { new : inner_dictionary} whole_dictionary.update(val) lst.pop() print(whole_dictionary)
实际输出
{'four': {'key': 'value'}, 'three': {'key': 'value'}, 'two': {'key': 'value'}, 'one': {'key': 'value'}}
问题原因
你之前的代码每次循环都直接把{A:D}赋值给内层字典,再把这个内层字典直接挂到外层的每个键下,导致所有键都指向同一个平级的{'key': 'value'},完全没有形成嵌套关系。
正确实现方式
要实现嵌套,得从最内层开始,逐层向外包裹。可以通过反向遍历B拆分后的层级列表,每次把当前的字典作为值包裹到上一层的键中。
代码示例
A = "key" B = "one.two.three.four" D = "value" # 从最内层的目标字典开始 current_dict = {A: D} # 拆分层级并反向遍历(从最底层到最顶层) for level in reversed(B.split('.')): # 用当前层级键包裹住上一层的字典 current_dict = {level: current_dict} print(current_dict)
运行结果
{'one': {'two': {'three': {'four': {'key': 'value'}}}}}
代码解释
- 先初始化
current_dict为最内层的{A: D},这是最终要嵌套在最深处的内容。 - 把B按
.拆分得到层级列表['one', 'two', 'three', 'four'],反向遍历后顺序变成four、three、two、one。 - 每一次循环都创建一个新字典,用当前层级名作为键,把上一步的
current_dict作为值,这样就实现了一层套一层的嵌套。 - 循环结束后,
current_dict就是我们要的多层嵌套字典。
内容的提问来源于stack exchange,提问作者Sundararajan
相关产品推荐
相关产品推荐

