2015-11-03 154 views
1

我的節點有一個由逗號分隔的屬性列表,我希望networkx比較它們,如果它們匹配,則在節點之間創建一條邊。NetworkX:將邊緣添加到節點屬性的圖形中

這就像我得到,但它不工作,關於如何改進我的方法的任何想法?

for node in G.nodes(): 
    while len(G.node[n]['attr']) = (G.node[n+1]['attr']): 
     # compare attributes? 
     valid_target_found = False 
      while not valid_target_found: 
       target = random.randint(0,N-1) 
       # pick a random node 
       if (not target in G.node[n]['attr']) 
         and len(G.node[n]['attr']) = (G.node[n+1]['attr']): 
         valid_target_found = True 
      G.add_edge(node, target) 

一個或一個以上的參數可以匹配,但只有一個是需要建立一個邊緣

+0

你能解釋一下你的意思是「匹配」?一個屬性匹配計數?都必須匹配?還有別的嗎? – Joel

+0

如果其中一個屬性是相同的,例如,在'node1'和'node30'中的屬性列表中,具有相同的屬性,因此應該有一個邊 – Chris

回答

1

假設你有一個無向圖,這可以用於

import networkx as nx 

G = nx.Graph() 
G.add_node('a', {'k': 1, 'b': 2}) 
G.add_node('b', {'x': 1, 'z': 2}) 
G.add_node('c', {'y': 1, 'x': 2}) 

for node_r, attributes in G.nodes(data=True): 
    key_set = set(attributes.keys()) 
    G.add_edges_from([(node_r, node) for node, attributes in G.nodes(data=True) 
         if key_set.intersection(set(attributes.keys())) 
         and node != node_r]) 

print(G.edges()) 
相關問題