我使用以下代码使用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])
Run Code Online (Sandbox Code Playgroud)
我想在创建新节点之前检查具有相同标签的节点是否存在.如果节点存在,我想通过将新值添加到现有值来更新其权重.
例如,在上面的例子中,我只想要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}})
Run Code Online (Sandbox Code Playgroud)
编辑:此答案基于networkx 2.0.似乎在networkx 2.0之前,nodes它只是一个函数而不是一个属性.因此,您可能需要参考文档以了解如何更新节点.我的猜测G.nodes(data=True)[ele[0]]["weight] = new_weight会起作用.或结账set_node_attributes功能.
| 归档时间: |
|
| 查看次数: |
3297 次 |
| 最近记录: |