2016-12-07 3 views
1

Я пробовал несколько поисков, но я действительно не знал, как спросить. Я понимаю короткую форму для циклов, но эта часть в словаре меня путает.short for python dictionary

resistances = {k: v if random.random() > self.mutProb else 
    not v for k, v in self.resistances.items()} 

ли это установка k как ключ первоначально, а затем на велосипеде через него в дальнейшем? Мне трудно представить, что такое «длинная рука».

+0

Это называется понятием словаря, или dict-comp для краткости. Он следует тем же концептуальным идеям, что и в списке-comp. Проверьте [это] (http://stackoverflow.com/q/3766711/198633) out – inspectorG4dget

ответ

2

У вас есть словаря понимание, и для каждой итерации цикла 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} 

но документация гласит:

ДИКТ понимание, в контрастировать с списком и устанавливать понимание, требует двух выражений, разделенных двоеточием, за которыми следуют обычные предложения «для» и «если». Когда понимание выполняется, результирующие элементы ключа и значения вставляются в новый словарь в том порядке, в котором они создаются.

+0

Ух ты ... удивительный ответ. Ура! – Loz