Storing and Accessing node attributes python networkx Storing and Accessing node attributes python networkx python python

Storing and Accessing node attributes python networkx


As you say, it's just a matter of adding the attributes when adding the nodes to the graph

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

or as a dictionary

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

To access the attributes, just access them as you would with any dictionary

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

You say you want to look at attributes for connected nodes. Here's a small example on how that could be accomplished.

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.

As of networkx 2.0, G.edges_iter() has been replaced with G.edges(). This also applies to nodes. We set data=True to access attributes. The code is now:

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.

NOTE: In networkx 2.4, G.node[] has been replaced with G.nodes[].


Additionally, you don't have to just assign the attributes when the node is added. Even after it's been added you can still set them directly.

import networkx as nxG=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'

Note: For versions before 2.4, use G.node[] instead of G.nodes[]. See deprecation notes.

You can also use set_node_attributes (documentation) which will let you set an attribute for multiple nodes at the same time:

edit

#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.xnx.set_node_attributes(G, values = {1:3.5, 2:56}, name='cost')G.node[1]['cost']> 3.5

Similar approaches can be used to set edge attributes.


As of networkx v2.0, you can use:

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

You can access this dictionary as usual:

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