理解Python词典上下文中的真/假评估

时间:2014-11-18 00:23:55

标签: python dictionary

我正在线上完成EdEx 6.00.2x课程,并且正在努力学习我的一部分代码:

newResistances = copy.deepcopy(self.resistances)

for drugs in self.resistances:

    resistancePicker = random.random()
    if self.resistances[drugs] == True:
        if resistancePicker < self.mutProb:
            print self.mutProb
            newResistances[drugs] = False

    elif self.resistances[drugs] == False:
        if resistancePicker < self.mutProb:
            print self.mutProb
            newResistances[drugs] = True
    print newResistances        
    return ResistantVirus(self.maxBirthProb, self.clearProb, newResistances, self.mutProb)

self.resistances是包含药品名称密钥以及TrueFalse{'a':True,'b':True}的字典。我的问题是,只有字典的第一个元素似乎在newResistances字典中被评估和更改。如果这个问题太模糊/需要更多背景,请告诉我。

1 个答案:

答案 0 :(得分:2)

这是因为您的return位置错误。如果将其移动到与for对齐,您将看到代码遍历所有键。

我还更新了代码以删除if predicate==True之类的构造,因为您可以改为if predicate:

以下是代码的外观:

for drugs in self.resistances:

    resistancePicker = random.random()

    if self.resistances[drugs]:
        if resistancePicker < self.mutProb:
            print self.mutProb
            newResistances[drugs] = False

    elif not self.resistances[drugs]: # or else:
        if resistancePicker < self.mutProb:
            print self.mutProb
            newResistances[drugs] = True
    print newResistances        

return ResistantVirus(self.maxBirthProb, self.clearProb, newResistances, self.mutProb)