2013-01-16 68 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