2017-06-19 83 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] 

我希望我理解正确的话你的意图......