[英]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.