1

dictの形式でノード、頂点、エッジの重みを含むグラフを示すための単純なネストされた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)

このコードは私が望むdictを与えてくれます。ただし、同様のネストされたdictを作成し、このdictにアクセスするコードをさらに実行すると、エラーが発生します。コードは次のとおりです。

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]のエントリを作成できると思いました。デフォルトのdictを使用してみましたが、結果は同じです。なんで?

4

2 に答える 2

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

これfor-loopが完了すると、 nは の最後の値と等しくなりますnodes

for every kinnodesgraph[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]のではなく、 に344がないことを示していますgraph[n]

于 2013-01-16T22:45:35.303 に答える