簡體   English   中英

使用Python中的元組瀏覽字典

[英]Going through a dictionary with tuples in Python

我在Python中有一本字典,里面有一個元組列表。 一個例子是:

peers = {'hash1': [('bot2', 1), ('bot1', 1)]}

我想做一個名為“ update”的函數,該函數接受所有字典,如果在元組中有一個數字,則變為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:適用於Python3。對於較舊的版本,將peers_temp = self.peers[key].copy()更改為peers_temp = list(self.peers[key])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM