Storing and Accessing node attributes python networkx

前端 未结 4 1627
天命终不由人
天命终不由人 2020-12-07 13:41

I have a network of nodes created using python networkx. i want to store information in nodes such that i can access the information later based on the node lab

相关标签:
4条回答
  • 2020-12-07 13:45

    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'] # 1185
    G.node['abc']['pob'] # usa
    G.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[].

    0 讨论(0)
  • 2020-12-07 13:51

    As of networkx v2.0, you can use:

    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}
    

    You can access this dictionary as usual:

    {'abc': 1185}['abc']
    > 1185
    
    0 讨论(0)
  • 2020-12-07 13:53

    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 nx
    G=nx.Graph()
    G.add_edge(1,2)
    #see comment below code for recent versions of networkx.
    G.node[1]['name'] = 'alpha'
    G.node[2]['name'] = 'omega'
    
    G.node[1]['name']
    > 'alpha'
    

    Note: In version 2.4+, use G.nodes[] instead of G.node[]. 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.x
    nx.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.

    0 讨论(0)
  • 2020-12-07 14:04

    Apparently now

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

    do not work anymore.

    I used this : https://networkx.github.io/documentation/stable/reference/classes/generated/networkx.Graph.nodes.html

    adding an s at node :

    G.nodes[1]['name'] = 'alpha'
    
    0 讨论(0)
提交回复
热议问题