假设我有一个包含运动对象实例的字典。每个运动物体都有一个位置,速度等。在程序的每个时间步更新中,我想检查两个活动物体(不是同一个物体,请注意)在参考系中占据相同的位置。如果他们这样做,这将模拟碰撞,涉及的两个对象将被销毁,并且他们的实例将从活动对象字典中移除。从字典中删除项目的应用
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 –