通过python的字典浏览字典



我在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])

最新更新