Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
存储和访问节点属性python networkx_Python_Attributes_Networkx - Fatal编程技术网

存储和访问节点属性python networkx

存储和访问节点属性python networkx,python,attributes,networkx,Python,Attributes,Networkx,我使用pythonnetworkx创建了一个节点网络。我希望在节点中存储信息,以便以后可以根据节点标签(节点名称)和存储信息的字段(如节点属性)访问信息。存储的信息可以是字符串或数字,我希望这样做,如果xyz是一个节点: 然后我想保存两个或三个具有字符串的字段,如xyz的出生日期dob=1185、xyz的出生地pob=usa、以及xyz的出生日期dayob=monday 我知道我可以使用G.add_node中有属性字典字段……但我似乎无法访问特定字段的属性字典字段。如果有其他方法,我将不胜感激

我使用python
networkx
创建了一个节点网络。我希望在节点中存储信息,以便以后可以根据节点标签(节点名称)和存储信息的字段(如节点属性)访问信息。存储的信息可以是字符串或数字,我希望这样做,如果
xyz
是一个节点:

然后我想保存两个或三个具有字符串的字段,如
xyz的出生日期
dob=1185
xyz的出生地
pob=usa
、以及
xyz的出生日期
dayob=monday

我知道我可以使用
G.add_node
中有属性字典字段……但我似乎无法访问特定字段的属性字典字段。如果有其他方法,我将不胜感激

然后,我想将
xyz
与网络中具有相同信息的其他节点进行比较。i、 e.根据出生日期、出生地点和出生日期,将节点
xyz
与节点
abc
相交


e、 g如果节点
xyz
abc
有一条边打印它们各自的
dob
s、它们的
pob
s和它们的
dayob
s

,正如您所说的,将节点添加到图中时只需添加属性即可

G.add_节点('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
要访问属性,只需像使用任何字典一样访问它们

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.

注意:networkx 2.4中,
G.node[]
已替换为
G.nodes[]

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

import networkx as nx
G=nx.Graph()
G.add_edge(1,2)
#see comment below code for recent versions of networkx.
G.nodes[1]['name'] = 'alpha'
G.nodes[2]['name'] = 'omega'

G.nodes[1]['name']
> 'alpha'
注意:对于2.4之前的版本,请使用
G.node[]
而不是
G.node[]
。看

您还可以使用
设置节点属性
(),这将允许您同时为多个节点设置属性:

编辑

#use the next line if it's networkx version 1.x
#nx.set_node_attributes(G, 'cost', {1:3.5, 2:56})

#use the next line if it's networkx version 2.x
#nx.set_node_attributes(G, {1:3.5, 2:56}, 'cost')

#or for something that works for 1.x or 2.x
nx.set_node_attributes(G, values = {1:3.5, 2:56}, name='cost')

G.node[1]['cost']
> 3.5

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

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
显然现在

G.node[1]['name'] = 'alpha'
不要再工作了

我用了这个:

在节点处添加s:

G.nodes[1]['name'] = 'alpha'

类似地,对于边,您可以使用
G.edge[u][v][foo']
访问边(u,v)的属性
foo
。如果您想要一个与给定节点相关的所有属性的列表,是否有一个
G.node['abc'].all_attributes()
方法返回所有属性键的列表?@kuanb
G.node['abc']
是一个字典,因此您可以使用常规的字典方法,例如
g.node['abc'].keys()
。我也遇到了这个问题。我要添加到以上答案中的唯一一件事是确保在字典前面包含
**
,否则它将被解析为多个参数。如果在开始时使用“G.add_nodes_from()”,如何为它们设置属性?例如,
Bi=nx.from_pandas_dataframe(G_df,source=0,target=1)
,如何为源和目标设置不同的属性?请注意,在networkx的2.x版本中,
set_node_attributes()
的第二个和第三个参数的顺序已经切换,因此它将是
nx.set_node\u属性(G,{1:3.5,2:56,'cost')