1

我有一个简单的嵌套字典,以字典形式表示具有节点、顶点和边权重的图形:

{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] 创建一个条目。我试过使用默认字典——结果是一样的。为什么?

4

2 回答 2

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

完成后for-loopn等于 中的最后一个值nodes

不能保证对于每个kin nodesgraph[n][k]都存在:

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

nodes都是尾巴,不是头。k迭代尾部也是如此。然而graph[n][k]正在放置k在预期的位置。

尾部和头部不一定可以互换,最后一个尾部 ,n可能不会连接到所有其他尾部 , k


如果您尝试制作distance的副本graph,请使用

import copy
distance = copy.deepcopy(graph)
于 2013-01-16T22:44:43.257 回答
1

该错误表明不是您不能分配给,而是在distance[n][k]中没有。 344graph[n]

于 2013-01-16T22:45:35.303 回答