假設我有一個包含運動對象實例的字典。每個運動物體都有一個位置,速度等。在程序的每個時間步更新中,我想檢查兩個活動物體(不是同一個物體,請注意)在參考系中佔據相同的位置。如果他們這樣做,這將模擬碰撞,涉及的兩個對象將被銷燬,並且他們的實例將從活動對象字典中移除。從字典中刪除項目的應用
dict actives{ 'missile' : object_c(x1, y1, z1),
'target' : object_c(x2, y2, z2),
'clutter' : object_c(x3, y3, z3),
... }
...
for key1 in self.actives.keys():
for key2 in self.actives.keys():
if not key1 == key2:
# Get Inertial Positions and Distance
Pos21 = self.actives[key2].Pos - self.actives[key1].Pos
distance = math.sqrt(sum(Pos21**2))
# If Distance <= Critical Distance
if distance <= 1.0e0
# Remove key1 and key2 from Actives
# -- This is where I need help --
我不能使用del
:鍵(和對象)將來自活性被刪除,但for
循環條件未能認識到這一點,就會遇到一個KeyError異常。在訪問循環條件的鍵時,我能做些什麼來從活動中刪除這些對象?
那似乎是正確的,但是在正確的條件下,如果to_be_removed列表與其他兩個對象佔據相同的位置(即,key1和key2之間的距離爲0.5,key1和key3之間的距離爲0.5),則'to_be_removed'列表可能具有多個'key1'是0.75)。在列表中具有相同密鑰的副本也會導致'pop'上的KeyError。但是,也許我們可以記錄'to_be_removed'列表,並在從字典中彈出之前清除它(消除重複的鍵)。 –
@ S.Gamgee:如果您指定'default'值(在這種情況下爲'None'),如果您從列表中刪除密鑰,則不會出現錯誤。 https://docs.python.org/3.5/library/stdtypes.html –