1

我在弄字典,我以前从来没有遇到过问题。我写了几个循环来帮助匹配和清除 dict,除了我不断收到以下错误。

Traceback (most recent call last):
  File "C:/Users/Service02/Desktop/D/TT/test.py", line 10, in <module>
    if resultDict[currentImageTest] == oldDict["image" + str(j)]:
KeyError: 'image1'

不知道为什么明显存在关键错误。使困惑。任何帮助表示赞赏!

resultDict = {"image1":1, "image2":2, "image3":3, "image4":4, "image5": 5}
oldDict = {"image1":1, "image2":22, "image3":3, "image4":47, "image5": 5}

i=1
j=1
while i<6:
    currentImageTest = "image" + str(i)

    while j<6:
        if resultDict[currentImageTest] == oldDict["image" + str(j)]:
            del resultDict[currentImageTest]

        else:
            pass

        j+=1
    i+=1


print resultDict

最终结果(已解决):

i=1
while i<6:
    currentImageTest = "image" + str(i)
    j=1
    while j<6:
        if oldDict["image" + str(j)] == resultDict[currentImageTest]:
            del resultDict[currentImageTest]
            break
        else:
            pass

        j+=1
    i+=1


print resultDict
4

2 回答 2

1
if resultDict[currentImageTest] == oldDict["image" + str(j)]:
            del resultDict[currentImageTest]

在您删除的第一个循环( i=1and ) 和您尝试与之比较的下一个循环 ( and ) 中,但由于已经删除,所以没有找到j=1resultDict["image1"]i=1j=2resultDict["image1"]oldDict["image2"]resultDict["image1"]key

编辑:

在这里更好地使用for循环而range()不是while:

resultDict = {"image1":1, "image2":2, "image3":3, "image4":4, "image5": 5}
oldDict = {"image1":1, "image2":22, "image3":3, "image4":47, "image5": 5}

for i in range(1,6):
    currentImageTest = "image" + str(i)
    for j in range(1,6):
        if resultDict[currentImageTest] == oldDict["image" + str(j)]:
            del resultDict[currentImageTest]
            break
        else:
            pass
于 2012-08-28T22:29:32.397 回答
0

发生的事情是您试图引用一个不存在的键,在本例中为“image1”。您想使用检查来确保不会遇到 KeyError。

if resultDict.has_key(currentImageTest) and resultDict[currentImageTest] == oldDict["image" + str(j)]

要么那个,要么你可以把它包装在一个 try..except

于 2012-08-28T22:30:16.317 回答