2017-07-25 38 views
1
>>> import networkx as nx 
>>> g = nx.Graph() 
>>> g.add_nodes_from([1, 2, 3, 4, 5], carved=False) 
>>> g[1] 
{} 
>>> nx.get_node_attributes(g, "carved") 
{1: False, 2: False, 3: False, 4: False, 5: False} 
>>> 

當我輸入'g [1]'時,我不應該得到「雕刻」屬性嗎? 以下工作:NetworkX add_nodes_from不能正常工作

>>> g[1] 
{} 
>>> g[1]["carved"] = True 
>>> g[1] 
{'carved': True} 
>>> 

缺少什麼我在這裏,爲什麼不是「中分」屬性被在第二個例子中應用爲?我在Windows上運行Python 2.7。我更新了我的網絡安裝,想着也許我有一箇舊版本?

任何幫助將不勝感激。

回答

1

看起來你打算使用g.node[1]而不是g[1]

0

TL/DR:使用g.node[u]獲取節點u的屬性。 g[u]是完全不同的東西。


底層的數據結構是g基本上是一個字典。節點是g的密鑰,並且如果比如說1g的密鑰,則g[1]是其密鑰是節點1的鄰居的字典。

所以在將節點放入g之後,您還沒有放入任何邊緣。 g[1]爲空的事實反映了1沒有鄰居的事實。一旦你去,並通過設置g[1]["carved"] = True直接編輯底層的數據結構,你會發現,現在g.neighbors(1)['carved'],並g現在有1'carved'之間的邊緣和邊緣有屬性True(從g.edge[1]['carved']。但是,因爲你直接編輯這'carved'已經爲節點創建的數據結構,g.nodes()不知道,這顯然不是你想要的。

相反,使用g.node[u]得到節點ug.edge[u][v]的屬性擺脫邊緣的任何屬性uv