[英]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.