[英]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.