2016-12-07 4 views
1

Ich versuchte ein paar Suchen, aber ich wusste nicht wirklich, wie man fragt. Ich verstehe kurze Form für Schleifen, aber dieser Teil in einem Wörterbuch verwirrt mich.kurz für Python-Wörterbuch

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

Ist Einstellung es k als Schlüssel zunächst und dann später das Fahrrad durch? Ich habe Schwierigkeiten, mir vorzustellen, was die "lange Hand" wäre.

+0

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

Antwort

2

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.

+0

Wow ... erstaunliche Antwort. Prost! – Loz