使用networkx创建节点以表示列表中包含的点集群

时间:2018-02-27 04:45:58

标签: python-3.x networkx

我试图在python中实现映射器算法,在我目前的步骤中,我有一个列表列表,其中每个元素包含一个集群连接的组件。从这里我想为每个集群创建一个节点,但是,因为列表不是像这样的可编程函数代码:

    for cluster in cluster_array:
        G.add_node(cluster)

不起作用。我的另一个想法是为列表中的多个元素创建节点,如下所示:

    for cluster in range(len(cluster_array)):
        G.add_node(cluster)

我的问题是,如果我使用后一个函数来创建我的节点。如何将节点与其相应的连接组件列表相关联?

1 个答案:

答案 0 :(得分:0)

这取决于你的意思"将节点与其连接的组件相关联"。如果您只需要将信息存储在节点中,则可以使用属性。

import networkx as nx                                     

# define some clusters                                                                                
cluster_array = [                                                               
    ['a','b','c'],                                                              
    ['X', 'Y', 'Z']]                                                             

# construct graph, with arbitrary label for nodes and the cluster info 
# as an attribute. (Here, the attribute is called "members")
G = nx.Graph()                                                                  
for i, cluster in enumerate(cluster_array):                                     
    G.add_node(i, members=cluster)        

您可以通过各种方式访问​​属性,例如:

print(G.nodes(data=True))
>>> [(0, {'members': ['a', 'b', 'c']}), (1, {'members': ['X', 'Y', 'Z']})] 

print(nx.get_node_attributes(G, 'members'))
>>> {0: ['a', 'b', 'c'], 1: ['X', 'Y', 'Z']}