存储和访问节点属性蟒蛇networkx(Storing and Accessing node att

2019-07-04 12:25发布

我有使用Python创建节点的网络networkx 。 我想存储在节点的信息,使得我可以访问以后基于节点的标签(节点的名称),并且,其中的信息已被存储(如节点的属性)的字段中的信息。 存储的信息可以是字符串或数字祝以这样的方式,如果这样做xyz是一个节点:

然后我想有串两个或三个字段保存喜欢的诞生之日起xyz dob=1185 ,出生的地方xyz pob=usa ,和天出生的xyz dayob=monday

我知道,我可以使用G.add_node在它的属性字典场......但我似乎无法访问它特定领域。 如果有任何其他的方式,我将不胜感激。

然后我想比较xyz与共同具有相同的信息网络的其他节点。 节点即相交xyz与节点abc基于bith的日期,出生地和出生天

例如,用于如果节点xyzabc具有边缘打印各自的dob S,其pob S和它们的dayob小号

Answer 1:

正如你所说的,它只是一个添加节点到图形时添加的属性的事

G.add_node('abc', dob=1185, pob='usa', dayob='monday')

或作为字典

G.add_node('abc', {'dob': 1185, 'pob': 'usa', 'dayob': 'monday'})

要访问属性,只是访问它们,你会与任何字典

G.node['abc']['dob'] # 1185
G.node['abc']['pob'] # usa
G.node['abc']['dayob'] # monday

你说你要看看在连接节点的属性。 下面是关于如何可能实现的一个小例子。

for n1, n2 in G.edges_iter():
    print G.node[n1]['dob'], G.node[n2]['dob']
    print G.node[n1]['pob'], G.node[n2]['pob']
    # Etc.

作为networkx 2.0,G.edges_iter()已被替换为G.edges()。 这也适用于节点。 我们设定data=True来访问属性。 该代码现在:

for n1, n2 in list(G.edges(data=True)):
    print G.node[n1]['dob'], G.node[n2]['dob']
    print G.node[n1]['pob'], G.node[n2]['pob']
    # Etc.


Answer 2:

此外,您不必只是分配的属性添加节点时。 它被添加后,即使你仍然可以直接设置。

import networkx as nx
G=nx.Graph()
G.add_edge(1,2)
G.node[1]['name'] = 'alpha'
G.node[2]['name'] = 'omega'

G.node[1]['name']
> 'alpha'

您还可以使用set_node_attributes ( 文档 ),这将让你设置在同一时间多个节点的属性:

nx.set_node_attributes(G, 'cost', {1:3.5, 2:56})
G.node[1]['cost']
> 3.5

类似的方法可以用来设置边缘属性。



Answer 3:

作为networkx V2.0,你可以使用:

import networkx as nx

G = nx.Graph()
G.add_node('abc', dob=1185, pob='usa', dayob='monday')
nx.get_node_attributes(G, 'dob')
> {'abc': 1185}

您可以访问此字典像往常一样:

{'abc': 1185}['abc']
> 1185


文章来源: Storing and Accessing node attributes python networkx