Python Networkx如何更新边缘添加';名称';作为属性?

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

我一直在使用NetworkX创建一个多向图,在我的实践中,我偶然发现了一个可能是一个简单的问题,我似乎无法正确回答

基本上,我想随着时间的推移“单独”添加“name”属性,并在添加边缘属性时保留其关键字。我知道“name”可能是一个保留字,但从下面的代码中可以看出,边缘数据仍然可以包含关键字“name”,没有任何问题

最后一个是我正在努力实现的目标

#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'
  • 不更新边数据。而是使用属性值创建另一条边
问题2:

  • 不创建类似于
    (9,10,{'name':'Malolos'})
    的输出,其中关键字'name'出现在属性dict中
如何使用单个属性更新现有的单个边 关键字“name”仍然出现在边缘属性dict中

提前谢谢你

您想要:

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']来进行类似的更新,就像你在上面介绍的那样:)