嵌套Dicts的麻烦

时间:2013-01-16 22:40:10

标签: python

我有一个简单的嵌套字典,用dict格式表示带有节点,顶点和边权重的图形:

{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初始化为dict,然后我可以创建distance [n] [k]的条目。我尝试过使用默认的dicts - 结果是一样的。为什么?

2 个答案:

答案 0 :(得分:2)

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

完成此for-loop后,n等于nodes中的最后一个值。

无法保证k中的每个nodes都存在graph[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)

答案 1 :(得分:1)

错误表示您无法分配到distance[n][k],但344中没有graph[n]