Sie haben ein Wörterbuch Verständnis und für jede Iteration der for
Schleife werden zwei Ausdrücke ausgeführt. Eine für den Schlüssel und eine für den Wert.
So in dem Ausdruck:
{k: v if random.random() > self.mutProb else not v
for k, v in self.resistances.items()}
beide k
und v if random.random() > self.mutProb else not v
sind Ausdrücke, und die erste erzeugt den Schlüssel, den zweiten, den Wert jedes Paares Schlüsselwert für das resultierende Wörterbuch.
Wenn Sie eine for
Schleife verwenden, würde die oben umgesetzt als:
resistances = {}
for k, v in self.resistances.items():
key = k
value = v if random.random() > self.mutProb else not v
resistances[key] = value
In Ihrem Beispiel der Schlüssel einfach auf den Wert der Variablen k
gesetzt ist, aber Sie können komplexere verwenden Ausdrücke auch.
Dictionary Comprehensions sind eine Spezialisierung von Dictionary Displays; die andere Form erzeugt ein Wörterbuch ohne Looping, aus einer statischen Liste von Schlüssel-Wert-Paaren und ist vielleicht bekannt vor:
d = {key1: value1, key2: value2}
aber die Dokumentation heißt es:
A dict Verständnis, in Im Gegensatz zum Auflisten und Festlegen von Comprehensions müssen zwei Ausdrücke mit einem Doppelpunkt gefolgt von den üblichen Klauseln "for" und "if" getrennt werden. Wenn das Verständnis ausgeführt wird, werden die resultierenden Schlüssel- und Wertelemente in der Reihenfolge, in der sie erzeugt werden, in das neue Wörterbuch eingefügt.
Dies ist ein Wörterbuch Verständnis oder kurz dict-comp genannt. Es folgt den gleichen konzeptionellen Ideen hinter einem List-Comp. Check [this] (http://stackoverflow.com/q/3766711/198633) aus – inspectorG4dget