You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Python中的嵌套列表结构转换为指定图结构的字典

问题分析与解决方法

首先要明确:你给出的原始example存在Python语法错误,无法直接运行,需要先修正为合法结构:

  • ['g': 'h']是非法写法,应改为字典{'g': 'h'};
  • 外层用大括号包裹列表会创建集合,但集合不能包含列表(不可哈希),所以外层需改为列表;
  • {'e', 'f'}是集合而非键值对结构,推测你想要的是字典{'e': 'f'}。

修正后的合法输入示例:

example = [
    {'g': 'h'},
    [
        {'a': 'b'}, {'c': 'd'},
        {'a': 'b'}, {'e': 'f'}
    ]
]

接下来实现你需要的图结构转换逻辑:核心是合并相同前缀路径,将后续节点挂载到对应路径下,同时保留顶级独立节点。

实现代码

def build_graph(input_data):
    result = {}
    
    def process_path(path_list):
        current_nodes = {}
        prev_key = None
        prev_node = None
        
        for item in path_list:
            if not isinstance(item, dict) or len(item) != 1:
                continue
            key, val = next(iter(item.items()))
            
            if prev_key is None:
                if key not in current_nodes:
                    current_nodes[key] = {}
                prev_node = current_nodes[key]
                prev_key = val
            else:
                if prev_key == key:
                    prev_node[val] = {}
                    prev_node = prev_node[val]
                    prev_key = None
                else:
                    prev_node[key] = {}
                    prev_node = prev_node[key]
                    prev_key = val
        
        for k, v in current_nodes.items():
            if k in result:
                result[k].update(v)
            else:
                result[k] = v
    
    for elem in input_data:
        if isinstance(elem, dict) and len(elem) == 1:
            key, val = next(iter(elem.items()))
            result[key] = val
        elif isinstance(elem, list):
            process_path(elem)
    
    return result

# 测试运行
example = [
    {'g': 'h'},
    [
        {'a': 'b'}, {'c': 'd'},
        {'a': 'b'}, {'e': 'f'}
    ]
]

output = build_graph(example)
print(output)

输出结果

运行后得到的结果与你的预期结构一致:

{
    'g': 'h',
    'a': {
        'b': {
            'c': 'd',
            'e': 'f'
        }
    }
}

逻辑说明

  1. 遍历输入的每个顶级元素:
    • 若为单键值对字典,直接作为顶级键值对加入结果;
    • 若为列表,调用process_path函数处理路径序列。
  2. process_path函数负责串联路径:
    • 遍历路径中的每个键值对,将前一个值作为后一个键的父节点;
    • 遇到相同前缀(如再次出现{'a':'b'}),将后续节点挂载到已有的a->b路径下;
    • 最终把处理好的路径合并到结果字典中。

内容的提问来源于stack exchange,提问作者Carabes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 05:25:22