Python程序中的KeyError但不是解释器中的KeyError?

时间:2014-04-06 13:31:43

标签: python algorithm

这是我尝试为最小生成树实现 Prims算法的程序。我的问题是当我作为一个整体执行程序时,它会显示 KeyError:7 Porgram run as a whole

When Executed in IDLE

但是当我在Interpreter中执行错误导致部分时,它显示没有错误

我的代码:

edges = {
            'A':{'D':1,'B':3},
            'B':{'A':3,'C':4},
            'C':{'B':4,'D':5,'A':2,'E':7},
            'D':{'A':1,'C':5,'E':6},
            'E':{'D':6,'C':7}
        }

# here NULL represented by -1 and Infinity represented by 1000

vertices = {
            'A':[1000,-1],
            'B':[1000,-1],
            'C':[1000,-1],
            'D':[1000,-1],
            'E':[1000,-1]
            }

def EXTRACTMIN():
    low = 'A'
    for key in vertices.keys():
        if vertices[low][0]>vertices[key][0]:
            low=key
    del vertices[low]
    return low

vertices['A'][0]=0

while not(vertices=={}):
    u=EXTRACTMIN()
    print(str(u)+" ")
    for v in [x for x in edges[u].keys()]:
        if v in vertices and edges[u][v]<vertices[v][0]:
            vertices[v][0]=edges[u][v]

1 个答案:

答案 0 :(得分:0)

嗯,问题出在函数EXTRACTMIN

首先从A删除密钥vertices,因为A是最小值。

然后,当再次调用函数EXTRACTMIN时,您尝试再次删除它(因为vertices[low][0]>vertices[key][0]总是False)但您已经删除A并且它不存在在vertices

你也没有把它放回到while循环中因为条件为v in vertices,我们知道A不在那里