Python Networkx如何更新边缘添加';名称';作为属性?
我一直在使用NetworkX创建一个多向图,在我的实践中,我偶然发现了一个可能是一个简单的问题,我似乎无法正确回答 基本上,我想随着时间的推移“单独”添加“name”属性,并在添加边缘属性时保留其关键字。我知道“name”可能是一个保留字,但从下面的代码中可以看出,边缘数据仍然可以包含关键字“name”,没有任何问题 最后一个是我正在努力实现的目标Python Networkx如何更新边缘添加';名称';作为属性?,python,python-2.7,networkx,Python,Python 2.7,Networkx,我一直在使用NetworkX创建一个多向图,在我的实践中,我偶然发现了一个可能是一个简单的问题,我似乎无法正确回答 基本上,我想随着时间的推移“单独”添加“name”属性,并在添加边缘属性时保留其关键字。我知道“name”可能是一个保留字,但从下面的代码中可以看出,边缘数据仍然可以包含关键字“name”,没有任何问题 最后一个是我正在努力实现的目标 #trying to update edge between 1,2 where there is still no 'name' attribut
#trying to update edge between 1,2 where there is still no 'name' attribute
G.edge[1][2]['name']='Lacuña'
#trying to add another edge to test if it will get the 'name' keyword
G.add_edge(9,10,name = 'Malolos')
print("\nNODES: " + str(G.nodes()))
print("EDGES: " + str(G.edges(data=True)))
输出:
NODES: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
EDGES: [(1, 2, {}), (1, 2, 'Lacu\xc3\xb1a'),
(4, 5, {'number': 282}), (4, 5, {'route': 37}),
(5, 4, {'number': '117'}), (6, 7, {}),
(7, 8, {}), (8, 9, {}), (9, 10, {'name': 'Malolos'})]
问题1:
G.edge[1][2]['name']='Lacuña'
- 不更新边数据。而是使用属性值创建另一条边
- 不创建类似于
的输出,其中关键字'name'出现在属性dict中(9,10,{'name':'Malolos'})
G[1][2]['name'] = 'Lacuña'
例如:
import networkx as nx
G = nx.Graph()
G.add_edge(1,2)
G[1][2]['name'] = 'Lacuña'
G.edges(data=True)
Out[1]: [(1, 2, {'name': 'Lacuña'})]
你想要:
G[1][2]['name'] = 'Lacuña'
例如:
import networkx as nx
G = nx.Graph()
G.add_edge(1,2)
G[1][2]['name'] = 'Lacuña'
G.edges(data=True)
Out[1]: [(1, 2, {'name': 'Lacuña'})]
我想这对那些可能忽略了使用有向图和多向图的初学者是有益的 问题1:不更新边缘数据。而是使用属性值创建另一条边 鉴于代码:
G.edge[1][2]['name']='Lacuña'
创建另一个edge实例,而不是在键值对中
当
G[1][2]['name']='Lacuña'
,将导致在'name'中出现错误
回答:对于有向图,多向图使用G[u][v][key]格式而不是默认的G[u][v]。因此,在更新上述内容时,['name']被视为未找到的密钥;使用该关键点而不是作为属性创建新边
因此,要更新多向图边并添加属性。代码应如下所示:
G[1][2][0]['name'] = 'Lacuña' #where 0 is an incremental integer if not set
G.edges(data=True)
Out[1]: [(1, 2, 0, {'name': 'Lacuña'})]
而@harryscholes的答案是如何更新有向图。我想这对那些可能忽略了使用有向图和多向图的初学者是有益的 问题1:不更新边缘数据。而是使用属性值创建另一条边 鉴于代码:
G.edge[1][2]['name']='Lacuña'
创建另一个edge实例,而不是在键值对中
当
G[1][2]['name']='Lacuña'
,将导致在'name'中出现错误
回答:对于有向图,多向图使用G[u][v][key]格式而不是默认的G[u][v]。因此,在更新上述内容时,['name']被视为未找到的密钥;使用该关键点而不是作为属性创建新边
因此,要更新多向图边并添加属性。代码应如下所示:
G[1][2][0]['name'] = 'Lacuña' #where 0 is an incremental integer if not set
G.edges(data=True)
Out[1]: [(1, 2, 0, {'name': 'Lacuña'})]
而@harryscholes的答案是如何更新有向图。感谢您的回复。我一小时前就解决了。问题是我使用的是一个多向图(我在上面提到过),结果是在更新时,我需要提供G[u][v][k][name']来进行类似的更新,就像你在上面介绍的那样:)谢谢你的回复。我一小时前就解决了。问题是我使用的是一个多向图(我在上面说过),结果是在更新时,我需要提供G[u][v][k][name']来进行类似的更新,就像你在上面介绍的那样:)