簡體   English   中英

為什么此鍵存在於空詞典中?

[英]Why does this key exist in an empty Dictionary?

sumDict = {}
n = 1000
print(sumDict)
for c in range(1,n):
    for d in range(1,n):
        result = c**3 + d**3
        if (result in sumDict):
            #print(1729 in sumDict)     #always true
            sumDict[result] = sumDict[result].append((c,d))
        else:
            sumDict[result] = [(c,d)]

for key,val in sumDict.items():
    for pair in val:
        for pair in val:
            print(pair,pair)]]

我正在嘗試找到滿足a ^ 3 + b ^ 3 = c ^ 3 + d ^ 3的所有整數組合。 我將c ^ 3 + d ^ 3的結果映射到滿足總和的對的列表。 我總是收到以下錯誤:

AttributeError:'NoneType'對象沒有屬性'append'

經過進一步調查,鍵1729總是由於某種原因而存在於字典中(除非我遺漏了某些東西)。 有人可以告訴我怎么回事嗎?

        sumDict[result] = sumDict[result].append((c,d))

append返回None,因此在執行此行后, sumDict[result]將引用None而不是它曾經引用的列表。 然后,下次執行此行時,它將嘗試在該None值上調用append並崩潰。

不要將append的結果分配給任何東西,只需調用它即可。

        sumDict[result].append((c,d))

字典根本不是空的。 您的問題在這里發生:

sumDict[result] = sumDict[result].append((c,d))

在這里,將sumDict[result]設置為None ,因為list.append()的返回值為None 下一次遍歷該列表時, result在字典中,但是與它關聯的值為None ,並且您不能追加到None

相反,只需編寫:

sumDict[result].append((c,d))

或者更好的是,完全刪除if語句,然后編寫:

sumDict.setdefault(result, []).append((c, d))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM