繁体   English   中英

检查python中networkx中是否存在具有相同标签的节点

[英]Check if a node with the same label exists in networkx in python

我使用以下代码使用networkx构建我的图形,如下所示。

mylist = [('chocolate_pudding', 6.3), ('tim_tam', 178.5), ('bread', 3.5), 
('chocolate_pudding', 8.5), ('tim_tam', 3.0), ('butter', 204.0)]

G = nx.Graph()

for ele in mylist:
    #if node with ele[0] does not exists, add the new node
         G.add_node(ele[0], weight=ele[1])
    #else, update the weight with the new weight value (weight = existing_weight + ele[1])

我想在创建新节点之前检查具有相同标签的节点是否存在。 如果节点存在,我想通过将新值添加到现有值来更新其权重。

例如,在上面的例子中,我想只有4个节点chocolate_pudding, tim_tam, bread, butter和他们的体重应该是14.8, 181.5, 3.5, 204.0分别。

我没有找到在networkx中这样做的正确方法。 因此,请告诉我是否可以在networkx中进行此操作?

您可以使用ele[0] in G来检查标签ele[0]是否已经存在。 更新值非常简单。

import networkx as nx
mylist = [('chocolate_pudding', 6.3), ('tim_tam', 178.5), ('bread', 3.5), ('chocolate_pudding', 8.5), ('tim_tam', 3.0), ('butter', 204.0)]

G = nx.Graph()

for ele in mylist: 
     if ele[0] not in G:
         G.add_node(ele[0], weight=ele[1])
     else:
         new_weight = G.nodes[ele[0]]["weight"] + ele[1]
         # set values
         G.node[ele[0]]["weight"] = new_weight

G.nodes(data=True)        
# NodeDataView({'chocolate_pudding': {'weight': 14.8}, 
#               'tim_tam': {'weight': 181.5}, 
#               'bread': {'weight': 3.5}, 
#               'butter': {'weight': 204.0}})

编辑:此答案基于networkx 2.0。 似乎在networkx 2.0之前, nodes只是一个函数而不是一个属性。 因此,您可能需要参考文档以了解如何更新节点。 我的猜测是G.nodes(data=True)[ele[0]]["weight] = new_weight可行。或者checkout set_node_attributes函数。

我认为最简单的方法是在构建图形之前计算这些值

from collections import defaultdict
import networkx as nx

mylist = [('chocolate_pudding', 6.3), ('tim_tam', 178.5), ('bread', 3.5), 
('chocolate_pudding', 8.5), ('tim_tam', 3.0), ('butter', 204.0)]

d = defaultdict(int)

for n, w in mylist:
    d[n] += w

G = nx.Graph()

for n, w in d.items():
    G.add_node(n, weight=w)

print(nx.get_node_attributes(G, 'weight'))
# {'chocolate_pudding': 14.8, 'tim_tam': 181.5, 'bread': 3.5, 'butter': 204.0}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM