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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 14:36:06