我在python中有一个字典,其中有一个元组列表。一个例子是:
peers = {'hash1': [('bot2', 1), ('bot1', 1)]}
我想执行一个称为"更新"的函数,该函数采用所有字典,如果在元组中有一个数字,将变为0,如果是0,则删除元组。
我实施的循环是:
def update(self):
for key in self.peers.keys():
for tup in self.peers[key]:
print "--"
print tup
if 0 in tup:
self.peers[key].remove(tup)
else:
newTup = (tup[0], 0)
self.peers[key].remove(tup)
self.peers[key].append(newTup);
如果我进行了两个"更新",则正确的行为应该是在第一个更新中我应该在0处有一个元组,而在下一个更新中,我应该有一个带有键'hash1'的空词典。但是在实际行为中,我认为:
第一次更新:
peers = {'hash1': [('bot1', 1)]}
(一个一个更新?为什么?)
第二个更新:
peers = {'hash1': [('bot1', 0)]}
(哦!此更新是正确的,但是为什么不第一个?)
有人可以帮助我解决这个循环吗?我不知道为什么它具有这种行为...我认为循环是正确的,但是...
谢谢!
喜欢ev。Kounis说 - 您不应该尝试修改列表,您迭代了。
您可以这样做:
def update(self):
for key in self.peers.keys():
peers_temp = self.peers[key].copy()
for tup in self.peers[key]:
print("--")
print(tup)
if 0 in tup:
peers_temp.remove(tup)
else:
newTup = (tup[0], 0)
peers_temp.remove(tup)
peers_temp.append(newTup);
self.peers[key] = peers_temp
@Edit:它适用于Python 3.对于较旧版本,peers_temp = self.peers[key].copy()
更改peers_temp = list(self.peers[key])