2016-03-02 73 views
1

一個關鍵的錯誤,我想在networkxget_edge_attribute返回networkx

import networkx as nx 
G = nx.erdos_renyi_graph(4,1) # This creates a complete graph 

nx.set_edge_attributes(G, 'sign', {(0, 1) : 1}) 

print nx.get_edge_attributes(G, 'sign')[(0, 1)] 

它打印1很簡單的東西。到現在爲止還挺好。但現在我的最後一行更改爲:

print nx.get_edge_attributes(G, 'sign')[(1, 0)] 

我想,既然邊緣定向的,這不應該的問題和代碼應重新打印1。然而,令我驚訝的是,我得到這個:

Traceback (most recent call last): 
    File "test.py", line 7, in <module> 
    print nx.get_edge_attributes(G, 'sign')[(1, 0)] 
KeyError: (1, 0) 

這讓我瘋狂。不應該把(1, 0)當作(0, 1)嗎?另外,如果情況並非如此,我如何讓networkx將它們視爲相同?另外,在我們談論邊緣的其他地方,我們是否總是需要爲每個邊緣指定兩次?

在此先感謝您的幫助。

回答

2

我想你應該訪問邊緣屬性爲無向圖:

G[0][1]['sign'] 

G[1][0]['sign'] 

這兩個正確返回1。我認爲nx.get_edge_attributes方法只允許獲得邊緣作爲一個整體的屬性,如:

print nx.get_edge_attributes(G, 'sign') 

回報:

{(0, 1): 1} 

希望有所幫助。