Python: Verständnis, um zwei Wörterbücher zu erstellen

7

Ich versuche, ein Verständnis zu schreiben, das zwei Wörterbücher auf folgende Weise zusammensetzt:

%Vor%

Das heißt, das resultierende Wörterbuch wird aus den Schlüsseln des ersten und den Werten des zweiten für jedes Paar gebildet, wobei der Wert des ersten gleich dem Schlüssel des zweiten ist.

Das habe ich bis jetzt:

%Vor%

aber es funktioniert nicht. Ich bin neu bei Python, also bin ich mir nicht sicher, ob das wirklich Sinn macht. Ich benutze Python 3.3.2 übrigens.

Vielen Dank im Voraus.

    
Roma149 24.07.2013, 23:27
quelle

4 Antworten

9

Eine Möglichkeit, dies zu tun ist:

%Vor%

Welches Verhalten wollten Sie für Schlüssel, die einen Wert haben, der nicht in d2 ist?

    
Peter DeGlopper 24.07.2013, 23:30
quelle
6

Einfach die Elemente von d1 durchlaufen lassen und dann für jedes Element, das Sie in das Ergebnis einfügen wollen, nicht den Wert von d1 verwenden, sondern stattdessen den neuen Wert in d2 mit d1 'suchen s Wert als Schlüssel:

%Vor%     
poke 24.07.2013 23:31
quelle
2

Dies funktioniert auch, wenn nicht alle Werte in d1 gültige Schlüssel für d2 sind:

%Vor%     
tom10 24.07.2013 23:32
quelle
2
%Vor%

Zwei Dinge, die Sie beachten sollten:

1) Wenn Sie eine for-in-Schleife direkt in einem dict verwenden:

%Vor%

python schleift über die Schlüssel im dict, d. h. dass die for-in-Schleife äquivalent ist zu:

%Vor%

Aber Sie sagen Python, dass jedes Mal ein Zwei-Tupel durch die Schleife zurückgegeben wird (k1, v1), und Python gibt nur jedes Mal einen Schlüssel durch die Schleife zurück. Das ist also ein Fehler. Sie können das korrigieren, indem Sie schreiben:

%Vor%

Die Funktion items () gibt jedes Mal ein Zwei-Tupel (Schlüssel, Wert) durch die Schleife zurück.

2) Angenommen, Sie haben diese Daten:

%Vor%

Um jeden der sechs Werte zu durchlaufen, fühlt es sich natürlich an, zu schreiben:

%Vor%

Aber das erzeugt den Fehler:

%Vor%

Damit es funktioniert, müssen die Schleifen "rückwärts" geschrieben werden:

%Vor%

Ich denke, der einfachste Weg sich daran zu erinnern ist: Die Schleifen sind in der gleichen Reihenfolge, wie wenn Sie sie ohne Listenverständnis geschrieben hätten:

%Vor%

Persönlich würde ich gerne sehen, dass sich das in python geändert hat, so dass man in einem Listen / dict / set Verständnis von "von innen nach außen" arbeitet, wie du es geschrieben hast. In jedem Fall sieht Ihr Code mit den Änderungen so aus:

%Vor%     
7stud 25.07.2013 00:02
quelle

Tags und Links