如何为networkx创建自定义对象作为节点,以及如何查找它?

3 投票
1 回答
3092 浏览
提问于 2025-04-17 08:17

我想让每个节点都有一个IP地址的字符串,还有经度和纬度的数值。那么,我该怎么在用networkx创建的图中查找这样的对象,并获取它的指针呢?

1 个回答

5

NetworkX的核心思想是图可以像字典一样使用。你不需要专门的对象来作为节点,因为节点可以在它们的“字典”中添加任意属性。

来看下面这个互动示例:

>>> import networkx as nx
>>> G = nx.Graph()
>>> G.add_node(1)
>>> G.node[1]['ipaddress'] = '8.8.8.8'
>>> G.node[1]['longitude'] = 37
>>> G.node[1]['latitude'] = 50
>>> G.node[1]
{'latitude': 50, 'ipaddress': '8.8.8.8', 'longitude': 37}
>>> G.node[1]['ipaddress']
'8.8.8.8'

在这里,我们创建了一个只有一个节点1的图,并给这个节点关联了ipaddresslongitudelatitude这些属性。你可以通过直接询问图来获取这个节点,几乎是瞬间就能得到它的属性。

如果你想引用特定的节点,有几种方法可以选择。比如,你可以使用字典来存储一个节点的列表或集合,方便管理任何想要的属性。第二种方法是,如果每个节点都有一个独特的属性,你可以直接用这个属性作为节点。比如,对于IP地址:

>>> H = nx.Graph()
>>> H.add_node('8.8.8.8', longitude=37, latitude=50)
>>> H.node['8.8.8.8']
{'latitude': 50, 'longitude': 37}

在这里,我还利用了NetworkX提供的一个便利功能,可以在创建节点时直接指定属性。

撰写回答