2014-09-18 896 views
0

我想訪問並存儲networkx圖的節點,然後對其進行進一步處理。我有以下代碼:在Python中訪問networkx圖的節點

for node in vis:  
    for a,b in G[node]: 
     print a,b 

該代碼給出了以下錯誤: 回溯(最近通話最後一個):[1]

File "C:\Users\Mrinal\workspace\algo_asgn1\prims.py", line 29, in <module> 
    for a,b in G[node]: 
TypeError: 'int' object is not iterable 

而當我寫:

for node in vis: 
     print G[node] 

我得到以下輸出,我猜想它是一個字典,其中鍵爲目標節點,連接權值爲值。

{2: {'weight': 5}, 3: {'weight': 2}, 4: {'weight': 2}} 
{2: {'weight': 5}, 3: {'weight': 2}, 4: {'weight': 2}} 
{2: {'weight': 5}, 3: {'weight': 2}, 4: {'weight': 2}} 
{2: {'weight': 5}, 3: {'weight': 2}, 4: {'weight': 2}} 
{2: {'weight': 5}, 3: {'weight': 2}, 4: {'weight': 2}} 

My圖表有以下數據:

1 2 5 
1 3 2 
2 3 4 
2 4 6 
1 4 2 

什麼錯誤我在做什麼在這裏? 有人可以請建議我更改。 謝謝

+0

你可以展示一些瓦爾例如'vis'和'sample'? – 2014-09-18 17:53:13

+0

vis和樣本都設置了讓我們說'1' 我想訪問2,5; 3,2; 4,2如在連接到1的節點中,並且它們的權重 – mribot 2014-09-18 18:16:17

+0

編輯的樣本作爲vis是相同的 – mribot 2014-09-18 18:39:48

回答

0

G[node]是一本字典。 Iterating over a dictionary gives you the keys of that dictionary,在這種情況下是整數2,3,4。因此,如果你運行這段代碼將得到以下的輸出:

>>> for a in {2: {'weight': 5}, 3: {'weight': 2}, 4: {'weight': 2}}: 
...  print a 
... 
2 
3 
4 

你遇到的問題是事實,你正試圖遍歷兩個變量莖 - for a, b in x - 在x是一個整數,因此不能分成兩個單獨的變量。相反,只需使用單個變量來獲取節點,例如

>>> node = {2: {'weight': 5}, 3: {'weight': 2}, 4: {'weight': 2}} 
>>> for a in node: 
...  print a, node[a] 
... 
2 {'weight': 5} 
3 {'weight': 2} 
4 {'weight': 2} 
0

我想通了,我在做什麼錯在這裏,我沒有使用.iteritems()

for node in vis:  
    for a,b in G[node].iteritems(): 
     print a,b