2013-10-12 73 views
0

您好,我有以下代碼爲圖執行鄰接列表,除了向va和vb添加新值時,舊的密鑰被覆蓋之外,它只能打印代碼。如果我發現頂點0與1和2相鄰,我想添加兩個,但是1會被2覆蓋。另外,我嘗試使用其他插入方法,並且出現錯誤0,這是字典中沒有鍵該索引:Python字典,動態插入

def caminhografo(grafo, va, vb): 
    vat = vertex 
    i = 0 
    a = 0 
    z = 0 
    va = int(va) 
    vb = int(vb) 
    x = len(grafo.node) 
    if va < vb: 
     for va in range (vb+1): 
      a = 0 
      x = len(grafo.node) 
      for a in range (x): 
       if [int(va),int(a)] in grafo.node: 
        vat.adj[va] = a 

    if va > vb: 
     while vb > va: 
      a = 0 
      x = len(grafo.node) 
      for a in range (x): 
       if[int(vb),int(a)] in grafo.node: 
        vat.adj[vb] = a 
      vb = vb - 1 
    print (vat.adj) 

我該如何動態地插入到正確的鍵?

這裏是頂點和grafo是圖形類:

class graph: 
    v = 0 
    a = 0 
    node = [] 

class vertex: 
    adj = {} 

感謝您的幫助。

+2

您的'if va> vb'如何與'while vb> va'一起使用?我原以爲你無法進入循環。 – hughdbrown

+0

什麼類型的對象是'vat.adj'? 'vat'似乎是一個全局變量'vertex'的引用,但是這對我沒有任何幫助。 – Blckknght

+0

它的工作原理是,如果條目處於這種情況下,va和vb比其他任何一個高一個或根本沒有。這只是一段時間做與第一次相反的時間。 – Rex

回答

0

使用defaultdict做了工作。

from collections import defaultdict 

然後,而不是使用類頂點,我只是創造了一個defaultdict(列表):

vat = defaultdict(list) 

之後,使用附加在其上的伎倆:

vat[va].append(a)

它似乎用蠻力創建列表字典不起作用,因爲追加不會發生。但是使用導入列表的默認字典解決了這個問題。

0

你可以宣佈從vat.adj每個值作爲一個表vat.adj[i] = [],做 vat.adj[vb].append(a)

注意到你需要vat.adj初始化每個項目以作爲對你頂點列表。

for i in range(n): 
    vat.adj[i] = [] 
+0

如果我有以下弧段: [[0,1],[1,0],[0,2],[2,0]] 它將打印: {0:[2,2], 1:[0,0],2:[0,0]} 這意味着它覆蓋了0:[1,1]也打印索引,這沒有幫助。 – Rex

+0

你的意思是當你做'vat.adj [0] .append(1)'時,它會將'0:[2,2]'覆蓋爲'0:[1,1]'? –

+0

我得到以下錯誤,如果我使用附加: AttributeError:'int'對象沒有屬性'追加' 這是追加: vat.adj [va] .append(a) – Rex