在Python中浏览元组字典

在Python中浏览元组字典,python,dictionary,tuples,Python,Dictionary,Tuples,我有一本Python字典,里面有一个元组列表。 例如: peers = {'hash1': [('bot2', 1), ('bot1', 1)]} 我想做一个名为“update”的函数,它会获取所有的字典,如果元组中有一个数字1,则变成0,如果是0,则删除元组 我实现的循环是: def update(self): for key in self.peers.keys(): for tup in self.peers[key]:

我有一本Python字典,里面有一个元组列表。 例如:

peers = {'hash1': [('bot2', 1), ('bot1', 1)]}
我想做一个名为“update”的函数,它会获取所有的字典,如果元组中有一个数字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

@编辑:它适用于Python3。对于较旧的版本,请更改
peers\u temp=self.peers[key].copy()
对于
peers\u temp=list(self.peers[key])

您正在修改列表。这是非常糟糕的做法。谢谢Roman,但我有一个错误:
'list'对象没有属性“copy”
这是“构造函数”的代码:
def announce(self,torrent\u hash,peer):如果没有(self.peers.has\u key(torrent\u hash))self.peers[torrent\u hash]=[]tup=(peer,1)self.peers[torrent\u hash],append(tup)
对于列表有一些类似“copy()”的方法吗?好的,我的代码适用于python3。只需将行peers\u temp=self.peers[key].copy()更改为peers\u temp=list(self.peers[key])哦,太好了!现在它工作了!我将您的答案作为已接受答案,并为Python的旧版本进行编辑。谢谢