У вас есть словаря понимание, и для каждой итерации цикла for
, два выражений выполняются. Один для ключа и один для значения.
Таким образом, в выражении:
{k: v if random.random() > self.mutProb else not v
for k, v in self.resistances.items()}
как k
и v if random.random() > self.mutProb else not v
являются выражениями, и первый производит ключ, второе значение каждого ключа пары значений для результирующего словаря.
Если вы должны были использовать for
цикл, выше будет осуществляться следующим образом:
resistances = {}
for k, v in self.resistances.items():
key = k
value = v if random.random() > self.mutProb else not v
resistances[key] = value
В вашем примере, ключ просто устанавливается на значение переменной k
, но вы можете использовать более сложные выражения тоже.
Словарь по-английски является специализацией Dictionary Displays; другая форма производит словарь без зацикливания, из статического списка пар ключ-значение, и, возможно, более знакомы вам:
d = {key1: value1, key2: value2}
но документация гласит:
ДИКТ понимание, в контрастировать с списком и устанавливать понимание, требует двух выражений, разделенных двоеточием, за которыми следуют обычные предложения «для» и «если». Когда понимание выполняется, результирующие элементы ключа и значения вставляются в новый словарь в том порядке, в котором они создаются.
Это называется понятием словаря, или dict-comp для краткости. Он следует тем же концептуальным идеям, что и в списке-comp. Проверьте [это] (http://stackoverflow.com/q/3766711/198633) out – inspectorG4dget