如何从嵌套的数据结构中创建具有节点和边的网络?

2024-09-29 23:25:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个嵌套的数据结构,其中每个元素可以是iterable,也可以不是iterable。我想构建一个图来转换网络中的嵌套数据结构(为此我想到了networkx包)。每个元素都是Tuple,其中值可以是整数或Iterable。你知道吗

我的最后一个图形应该是这样的,其中每个箭头就像所有缩进元素的边(即mainbox1连接到bigbox2、smallbox3、mediumbox4)

mainbox1 --> 
            bigbox2 -->
                        mediumbox5
                        smallbox6
            smallbox3
            mediumbox4 -->
                        smallbox7

我努力创建一个算法来实现我想要的。我认为它应该是递归的(添加每个项直到不再有嵌套),但是我没有成功地编写实现。你知道吗

这是我的出发点。你知道吗

import networkx as nx

example = [('mainbox1',[('bigbox2', [('mediumbox5'),
                                   ('smallbox6')]),
                        ('smallbox3'),
                        ('mediumbox4', ('smallbox7'))
                        ] )]

Tags: 网络networkx元素数据结构整数iterabletuplesmallbox3
1条回答
网友
1楼 · 发布于 2024-09-29 23:25:53

示例数据中的元组有一些问题。我做了一些修正,这个代码正常

import networkx as nx


def rec_make(g, root, nodes):
    for node in nodes:
        g.add_edge(root, node[0])

        if isinstance(node[1], list):
            rec_make(g, node[0], node[1])


def main():
    g = nx.Graph()

    example = [('mainbox1', [('bigbox2', [
        ('mediumbox5', 5),
        ('smallbox6', 6)
    ]), ('smallbox3', 3), ('mediumbox4', [
        ('smallbox7', 7)
    ])])]

    rec_make(g, example[0][0], example[0][1])

    print("Nodes in G: ", g.nodes())
    print("Edges in G: ", g.edges())

你得到的正是你想要的:

Nodes in G:  ['mainbox1', 'bigbox2', 'mediumbox5', 'smallbox6', 'smallbox3', 'mediumbox4', 'smallbox7']
Edges in G:  [('mainbox1', 'bigbox2'), ('mainbox1', 'smallbox3'), ('mainbox1', 'mediumbox4'), ('bigbox2', 'mediumbox5'), ('bigbox2', 'smallbox6'), ('mediumbox4', 'smallbox7')]

相关问题 更多 >

    热门问题