2017-06-19 78 views
0

內通過一個元組迭代我現在有在字典中定義的字符的列表:Python中的字典

characters = {'Tom':['Brown Hair', 'Brown Eyes'], 
'Dick':['Brown Hair', 'Blue Eyes'], 
'Harry':['Blonde Hair', 'Brown Eyes'], 
'Joe':['Blonde Hair', 'Blue Eyes']} 

我隨機生成的屬性來針對在詞典中的值進行檢查。如果屬性不包含在分配給鍵的值中的任何位置,那麼它將被刪除。如果是,那麼密鑰不會被刪除。我曾經嘗試這樣做:

def one_turn(self): 
    for a, b in self.characters.items(): 
     if self.att not in self.answer: 
      if self.att in b: 
       del self.characters[a] 
     else: 
      if self.att not in b: 
       del self.characters[a] 

當self.att分配給它會通過值列表逐個迭代的屬性,而我想這一切作出決定是否刪除或不前的檢查。

乾杯

+0

可能你解釋一下你的意思:「我希望在作出決定之前檢查一切」。你的角色也有變化/更新嗎? –

+0

請包括示例輸入和預期輸出,以及您得到的異常的完整回溯。你可以減少代碼,不要依賴'self'(將'self。[attrname]'的值作爲函數參數傳入,這使得你的例子更加簡單。「 –

+0

也就是說,你不能迭代字典,同時從中刪除鍵。有些技術可以替代,但沒有明確的問題描述和預期輸出,我們無法開始選擇正確的。 –

回答

0

你只需要一個列表保持值的存在(或不存在)的軌道:

def one_turn(self): 
    missing_list = [] 
    for a, b in self.characters.items(): 
     if self.att not in self.answer: 
      if self.att in b: 
       missing_list.append(a) 
     else: 
      if self.att not in b: 
       missing_list.append(a) 

    # now delete all relevant characters 
    for key in missing_list: 
     del self.characters[key] 

我希望我理解正確的話你的意圖......