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

如何用NetworkX从下游节点字典创建符合约束的DiGraph

用下游节点字典创建NetworkX有向图(DiGraph)的通用方法

问题描述

给定一个表示节点下游关系的字典:键是节点,对应的值列表是该节点的下游节点(示例中箭头方向向上,终端节点位于顶部)。示例字典如下:

dict_ = {0: [1],
         1: [],
         2: [],
         3: [0, 1],
         4: [0, 1, 2]}

期望生成的有向图需满足:

  • 终端节点1、2在顶部,无后续节点
  • 节点3指向0和1,节点0指向1
  • 节点4指向0、1、2
    结构示意:
1                2        ^    # 有向图箭头始终向上
|                |        |
0____            |        |
|    |           |        |
3    |           |        |
     |___________|        |
     4                    |

通用解决方案

算法思路

  1. 全节点收集:既要包含字典里作为键的节点,也要涵盖所有值列表里的下游节点,避免遗漏仅作为下游存在的终端节点(比如示例中的节点2)。
  2. 批量加边:遍历字典的每个键值对,为每个源节点(键)向其值列表中的每个下游节点添加一条源节点 → 下游节点的有向边。

代码实现

import networkx as nx

def create_downstream_digraph(downstream_dict):
    # 初始化有向图实例
    G = nx.DiGraph()
    
    # 收集所有节点,避免遗漏终端节点
    all_nodes = set(downstream_dict.keys())
    for targets in downstream_dict.values():
        all_nodes.update(targets)
    G.add_nodes_from(all_nodes)
    
    # 遍历添加所有有向边
    for source, targets in downstream_dict.items():
        for target in targets:
            G.add_edge(source, target)
    
    return G

# 测试示例字典
dict_ = {0: [1],
         1: [],
         2: [],
         3: [0, 1],
         4: [0, 1, 2]}

G = create_downstream_digraph(dict_)

# 验证结果
print("所有节点:", list(G.nodes()))
print("所有边:", list(G.edges()))

输出验证

运行代码后会输出:

所有节点: [0, 1, 2, 3, 4]
所有边: [(0, 1), (3, 0), (3, 1), (4, 0), (4, 1), (4, 2)]

完全匹配期望的图结构,且算法适配任意格式的下游节点字典。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:52:30