networkx edge 属性_NetworkX:有向图

本文探讨在处理复杂关联时如何利用NetworkX的DiGraph来建模,并通过示例展示如何找到从根节点到目标节点的路径、添加边的属性以及遍历节点进行数据融合。
摘要由CSDN通过智能技术生成

ea4bc647f0efbe4173333082da924c65.png

在实现混合关联时,发现处理多层关联的代码有点复杂。

左右关联,首先想到的是树,只看一个source,树确实是个不错的选择,尤其是自底向上逐层关联的场景中,树保证了可回溯。可是在多个表join成一个数据集时,同一层的多个source又构成链表,也就是说要在遍历树的同时,还要兼顾list。

从source的定义来看,是个嵌套列表,网上能找到很多flat的实现。可是要实现自底向上,还是要加自己写的代码。

source的定义,像是一个由二叉树构成的列表,可是在同一层之内,多个source之间有一个“主表”并联起多张表(join的习惯用法)。这样看,就是个有向图。图的路径发现功能可以实现可回溯。

NetworkX提供了MultiDiGraph、DiGraph两种有向图结构,两者的区别,在于MultiDiGraph允许两个节点之间,存在多个相同方向的边,这个功能暂时用不到,只要用DiGraph就够了。


验证数据:

import networkx as nx
import matplotlib.pyplot as plt

data_dict = {
    1:[{'left':20, 'right':21}],
    20:[{'left':30, 'right':31}],
    21:[{'left':40, 'right':41}],
    30:[],
    31:[],
    40:[],
    41:[]
}

G = nx.DiGraph()

# step 1: add edges
for key in data_dict:
    print(key)
    for source in data_dict[key]:
        if 'left' in source:
            print('left [%d]' % (source['left']))
            if source['left'] in data_dict:
                G.add_edge(key, source['left'])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值