Almacenamiento y acceso a los atributos del nodo python networkx

Tengo una red de nodos creados usando python networkx . Quiero almacenar información en nodos, de modo que pueda acceder a la información más tarde según la etiqueta del nodo (el nombre del nodo) y el campo en el que se ha almacenado la información (como los atributos del nodo). La información almacenada puede ser una cadena o un número que deseo hacerlo de manera tal que si xyz es un nodo:

luego quiero guardar dos o tres campos con cadenas como la fecha de nacimiento de xyz dob=1185 , el lugar de nacimiento de xyz pob=usa y el día de nacimiento de xyz dayob=monday .

Sé que puedo usar G.add_node tiene el campo de diccionario de atributos … pero parece que no puedo acceder a él para un campo en particular. Si hay alguna otra manera lo agradecería.

Luego quiero comparar xyz con otros nodos en las redes que tienen la misma información en común. es decir, la intersección del nodo xyz con el nodo abc según la fecha de nacimiento, el lugar de nacimiento y el día de nacimiento

por ejemplo, si los nodos xyz y abc tienen un borde, imprimen sus respectivos dob s, sus pob s y su dayob s

Como usted dice, es solo una cuestión de agregar los atributos al agregar los nodos al gráfico

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

o como un diccionario

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

Para acceder a los atributos, simplemente acceda a ellos como lo haría con cualquier diccionario

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

Usted dice que quiere ver los atributos de los nodos conectados. Aquí hay un pequeño ejemplo de cómo se podría lograr eso.

 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. 

A partir de networkx 2.0, G.edges_iter () ha sido reemplazado por G.edges (). Esto también se aplica a los nodos. Establecemos data=True para acceder a los atributos. El código es ahora:

 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. 

Además, no tiene que asignar simplemente los atributos cuando se agrega el nodo. Incluso después de que se haya agregado, aún puede establecerlos directamente.

 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' 

También puede usar set_node_attributes ( documentación ) que le permitirá establecer un atributo para varios nodos al mismo tiempo:

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

Se pueden utilizar enfoques similares para establecer atributos de borde.

A partir de networkx v2.0, puede utilizar:

 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} 

Puedes acceder a este diccionario como de costumbre:

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