Ist es möglich, in Python basierend auf einer Liste von Schlüsseln ein geordnetes "Segment" eines Wörterbuchs zu erstellen?

8

Angenommen, ich habe das folgende Wörterbuch und die Liste:

%Vor%

Gibt es einen direkten (pythonischen) Weg, die Schlüssel / Wert-Paare aus dem Wörterbuch zu entfernen, für die die Schlüssel Elemente in der Liste sind, in einer Reihenfolge, die durch die Listenreihenfolge definiert ist?

Der naive Ansatz besteht darin, einfach über die Liste zu iterieren und die Werte in der Karte einzeln herauszuziehen, aber ich frage mich, ob Python das Äquivalent zum Listen-Slicing für Wörterbücher hat.

    
merlin2011 29.03.2012, 19:57
quelle

4 Antworten

9

Weiß nicht, ob Python genug ist, aber das funktioniert:

%Vor%

Dies ist ein Listenverständnis , aber wenn Sie diese Liste nur einmal durchlaufen müssen Sie können es auch in einen Generatorausdruck umwandeln, z :

%Vor%

Natürlich funktionieren die vorherigen Methoden nur, wenn alle Elemente in der Liste im Wörterbuch vorhanden sind; Um den Schlüssel-nicht-Gegenwart-Fall zu berücksichtigen, können Sie dies tun:

%Vor%     
digEmAll 29.03.2012, 20:05
quelle
5
%Vor%     
Ignacio Vazquez-Abrams 29.03.2012 20:38
quelle
3

Wie wäre es damit? Nimm jedes Element in my_list und gib es an die Methode get des Wörterbuchs weiter. Es behandelt auch Ausnahmen um fehlende Schlüssel, indem sie durch None ersetzt werden.

%Vor%

Wenn du tupples zip it willst -

%Vor%

Wenn Sie ein neues Diktat wünschen, übergeben Sie das Tupel an dict.

%Vor%     
FakeRainBrigand 29.03.2012 20:30
quelle
1

Ein direkter Weg wäre, jedes Element aus dem Wörterbuch auszuwählen und zu prüfen, ob der Schlüssel in der Liste vorhanden ist.

%Vor%

Die obige Suche würde linear sein, so dass Sie durch die Umwandlung der Liste in set

etwas an Leistung gewinnen könnten %Vor%

Und schließlich, wenn Sie ein Wörterbuch anstelle einer Liste von Schlüsseln benötigen, können Wertpaartupel das Wörterbuchverständnis verwenden

%Vor%     
Abhijit 29.03.2012 20:12
quelle

Tags und Links