Python中如何将关系元组列表转换为指定结构嵌套字典
实现方法
要把给定的边元组列表转成指定的嵌套字典,不需要依赖第三方库,顺着边的层级指向逐层搭建结构即可,整体流程清晰直接:
- 先把所有边的「父节点-子节点」指向整理成邻接表,方便快速查询每个节点的直接下级
- 找出所有没有上级指向的根节点,也就是从来没出现在边的子节点位置的节点,这些是嵌套字典最外层的键
- 从每个根节点开始,顺着边的指向逐层递归搭建嵌套结构,没有下级的节点直接对应空字典
完整可运行代码
# 输入的边元组列表 edges = [(0, 1), (1, 2), (1, 3), (3, 4), (5, 6), (4, 6)] # 构建邻接表,同时记录所有出现过的子节点 adj = {} all_children = set() for parent, child in edges: adj.setdefault(parent, []).append(child) all_children.add(child) # 筛选根节点:所有没被其他节点指向的节点 all_nodes = set(adj.keys()) | all_children roots = all_nodes - all_children # 递归生成单个节点对应的嵌套结构 def generate_subtree(current_node): subtree = {} # 只有当前节点有下级时,才继续往下嵌套 if current_node in adj: for child in adj[current_node]: subtree[str(child)] = generate_subtree(child) return subtree # 拼接成最终的完整字典 result = {} for root in roots: result[str(root)] = generate_subtree(root)
结果校验
运行上面的代码得到的输出和要求的结构完全一致:
print(result) # 打印输出: # { # "0": { # "1": { # "2": {}, # "3": { # "4": { # "6": {} # } # } # } # }, # "5": { # "6": {} # } # }
注意:这个实现会为每个路径上的节点独立生成嵌套字典,不会出现跨路径的引用共享——比如例子中的节点6,会在「0→1→3→4→6」和「5→6」两个分支分别独立生成空字典,完全匹配目标结构要求。如果关系图存在循环指向,需要在递归函数里加入已访问节点的判断,避免无限递归导致栈溢出。
内容的提问来源于stack exchange,提问作者Gurmeet Singh
相关产品推荐
相关产品推荐

