2013-01-16 96 views
1

我有一個簡單的嵌套字典來指示與節點,頂點和在形式字典邊權的曲線圖:麻煩與嵌套日文N3 N4 N5

{node: {vertex: weight, ... } ...}

這是我如何創建它:

with open(file) as f: 
     __, __1 = next(f).split() 
     for line in f: 
      tail, head, weight = line.split() 
       g1[tail] = {} 
       g1[tail][head] = int(weight) 

此代碼給我我想要的字典。然而,當我運行更多的代碼來創建一個類似的嵌套字典並訪問這個字典時,我遇到了一個錯誤。下面是代碼:

nodes = g1.keys() 
distance = {} 

    for n in nodes: 
     distance[n] = {} 
    for k in nodes: 
     distance[n][k] = graph[n][k] 

某處在這裏,這個錯誤影響了:

distance[n][k] = graph[n][k] 
KeyError: '344' 

表明我還沒有創造了「344」的關鍵是什麼這個代碼試圖去做。我想通過初始化每個節點n爲一個字典,然後我可以創建一個距離[n] [k]的條目。我試過使用默認的字典 - 結果是一樣的。爲什麼?

+0

您是否嘗試通過'dict()'將所有初始化更改爲'{}'? –

+0

使用文字語法'{}'是合適的,不需要使用'dict'內建。 –

回答

2
for n in nodes: 
    distance[n] = {} 

for-loop完成後,n等於在nodes的最後一個值。

沒有保證在每nodeskgraph[n][k]存在:

for k in nodes: 
    distance[n][k] = graph[n][k] 

nodes都尾巴,沒有頭。所以k正在迭代尾巴。然而graph[n][k]k置於預期的頭部位置。

尾巴和頭部不一定是可以互換的,最後一條尾巴n可能不會連接到其他尾巴k


如果你正試圖使distance的副本,然後使用

import copy 
distance = copy.deepcopy(graph) 
1

的錯誤表示不,你不能分配給distance[n][k],但存在graph[n]沒有344