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

基于列表或字典构建依赖关系图(Python实现)

单词依赖关系图的构建与可视化

需求说明

给定单词关系对列表:

[['rowerowy', 'rower'],
 ['rowerzysta', 'rower'],
 ['domeczek',  'domek'],
 ['domek', 'dom'],
 ['rowerzystka', 'rowerzysta']]

需要将这些单词合并为依赖组,构建成如下形式的连接图:

rowerowy --> rower <-- rowerzysta <--- rowerzystka

domeczek --> domek --> dom

无关联的单词则作为单节点图。

已实现的两种字典方案

第一种:列表存储依赖节点

data = [['rowerowy', 'rower'],
        ['rowerzysta', 'rower'],
        ['domeczek',  'domek'],
        ['domek', 'dom'],
        ['rowerzystka', 'rowerzysta']]

dc = {}
for a in data:
    if a[1] in dc:
        dc[a[1]].append(a[0])
    else:
        dc[a[1]] = [a[0]]

输出结果:

{'rower': ['rowerowy', 'rowerzysta'],
 'domek': ['domeczek'], 
 'dom': ['domek'],
 'rowerzysta': ['rowerzystka']}

第二种:集合存储依赖节点(推荐,支持去重)

def maketree(source):
    graph = {}
    for pair in source:
        nodein, nodeout = pair
        if nodeout in graph:
            graph[nodeout].add(nodein)
        else:
            graph[nodeout] = {nodein}
    # 找出根节点(没有被其他节点指向的节点)
    graph[None] = set(graph.keys()).difference(set.union(*graph.values()))
    return graph

该方案使用集合存储每个节点的依赖项,自动实现去重,同时通过graph[None]标识出所有根节点(没有被其他节点关联的节点),更适合后续的图遍历与可视化。

图形化展示实现

可以使用Python的networkx库构建图结构,搭配matplotlib进行可视化,步骤如下:

  1. 安装依赖库(未安装时执行):
pip install networkx matplotlib
  1. 完整可视化代码:
import networkx as nx
import matplotlib.pyplot as plt

def maketree(source):
    graph = {}
    for pair in source:
        nodein, nodeout = pair
        if nodeout in graph:
            graph[nodeout].add(nodein)
        else:
            graph[nodeout] = {nodein}
    graph[None] = set(graph.keys()).difference(set.union(*graph.values()))
    return graph

# 输入数据
data = [['rowerowy', 'rower'],
        ['rowerzysta', 'rower'],
        ['domeczek',  'domek'],
        ['domek', 'dom'],
        ['rowerzystka', 'rowerzysta']]

# 构建依赖图结构
tree = maketree(data)

# 创建有向图
G = nx.DiGraph()

# 添加所有节点与边
all_nodes = set(tree.keys()) - {None}
for node in all_nodes:
    G.add_node(node)
    for dependent in tree[node]:
        G.add_node(dependent)
        G.add_edge(dependent, node)  # 依赖关系:依赖节点 -> 被依赖节点

# 设置固定布局保证图形稳定
pos = nx.spring_layout(G, seed=42)

# 绘制节点、边与标签
nx.draw_networkx_nodes(G, pos, node_size=2000, node_color='lightblue')
nx.draw_networkx_edges(G, pos, arrowstyle='->', arrowsize=20)
nx.draw_networkx_labels(G, pos, font_size=12, font_weight='bold')

# 隐藏坐标轴
plt.axis('off')

# 显示图形
plt.show()

运行代码后会生成有向图,直观展示单词间的依赖关系:

  • rowerowy、rowerzysta指向rower,rowerzystka指向rowerzysta
  • domeczek指向domek,domek指向dom

如果存在无关联的单节点,直接将节点添加到图中即可单独显示。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:30:51