如何用Python 3将指定列表生成特定结构的嵌套字典
Python 3 生成指定嵌套字典解决方案
输入需求
将以下列表转换为嵌套字典,要求第一个子列表的元素作为顶层键,后续子列表元素作为嵌套子项:
input_list = [ ["Layer 1.A", "Layer 1.B"], ["Layer 2.A", "Layer 2.B"], ["Layer 3"], ["Layer 4"] ]
已尝试的方法及问题
- 使用
product方法:生成全排列列表,不符合嵌套字典要求,输出示例:[ ["Layer 1.A", "Layer 2.A", "Layer 3", "Layer 4"], ["Layer 1.A", "Layer 2.B", "Layer 3", "Layer 4"], ["Layer 1.B", "Layer 2.A", "Layer 3", "Layer 4"], ["Layer 1.B", "Layer 2.B", "Layer 3", "Layer 4"] ] - 嵌套for循环:无法正确实现嵌套内容的添加逻辑
- 递归尝试:使用
dict(zip(keys, dictionary) for keys in product(*dictionary2))时,dict或zip会遍历字符串的每个字符,不符合预期 - Lambda函数:未找到适配的实现方式
期望输出
仅第一层键不同,内部结构完全一致:
[ {"Layer 1.A": { "Layer 2.A": { "Layer 3" : "Layer 4" }, "Layer 2.B": { "Layer 3" : "Layer 4" } } }, {"Layer 1.B": { "Layer 2.A": { "Layer 3" : "Layer 4" }, "Layer 2.B": { "Layer 3" : "Layer 4" } } } ]
解决代码
def build_nested_dict(layers): # 从最后一层倒推构建公共嵌套结构 nested = layers[-1][0] for layer in reversed(layers[1:-1]): temp_dict = {} for item in layer: temp_dict[item] = nested nested = temp_dict # 生成包含顶层键的最终结果列表 result = [] for top_key in layers[0]: result.append({top_key: nested}) return result # 测试执行 input_list = [ ["Layer 1.A", "Layer 1.B"], ["Layer 2.A", "Layer 2.B"], ["Layer 3"], ["Layer 4"] ] output = build_nested_dict(input_list) import json print(json.dumps(output, indent=4))
代码说明
- 倒推构建内部结构:从最后一层的
Layer 4开始,依次向前遍历每一层,将当前层的所有元素作为键,对应的值为上一层构建好的嵌套结构,得到所有顶层键共用的内部嵌套字典。 - 生成最终列表:遍历第一层的每个键,将每个键与内部嵌套字典组合成单独的字典,再收集进结果列表。
内容的提问来源于stack exchange,提问作者cram
相关产品推荐
相关产品推荐

