Generatoren, die in Python 2 und 3 einheitlich über ein Wörterbuch iterieren

8

Gibt es eine Möglichkeit, effizient über die Werte / Elemente in einem Wörterbuch zu iterieren, das sowohl in Python 2 als auch in Python 3 funktioniert?

In Python 2 kann ich

schreiben %Vor%

und in Python 3 habe ich folgende Möglichkeiten:

%Vor%

Also kann ich mit for x in mydict über die Schlüssel iterieren, und das funktioniert in Python 2 und 3. Aber gibt es eine Möglichkeit, über Werte und Schlüssel / Wert-Paare ("Elemente") zu iterieren, die universell funktionieren? Ich brauche es zum Schreiben von Python-Code, der in beiden Python-Versionen ausgeführt werden kann.

(Nebenbei bemerkt, können andere Hindernisse mit Iteratoren leicht umgangen werden, zum Beispiel:

%Vor%

Die Wörterbuchmethoden können jedoch nicht einfach wie map und zip neu definiert werden.)

Irgendwelche Ideen?

    
Daniel 02.05.2012, 05:22
quelle

4 Antworten

9

values ​​() Version von Just after dunce's Antwort

%Vor%

oder

%Vor%

Das ist aber ziemlich beschissen. Sie können die Python-Version überprüfen und anstatt den Generator zurückzugeben, geben Sie d.items() oder d.iteritems() entsprechend zurück

Ich denke, eine bessere Frage könnte sein, wie man Python2-Code schreibt, der gut mit 2to3 funktioniert und guten Python3-Code erzeugt.

    
John La Rooy 02.05.2012, 05:34
quelle
7

Der folgende Code funktioniert in Py2 und Py3:

%Vor%

Beachten Sie, dass diese Lösung den Vorteil hat, die nativen Iteratoren zu verwenden, anstatt Ihre eigenen Generatoren zu rollen und eigene Lookups durchzuführen. Die nativen Iteratoren sind schneller als die anderen vorgestellten Lösungen.

    
Raymond Hettinger 02.05.2012 06:56
quelle
3

Dies wird Ihnen einen Generator geben:

%Vor%

Wenn Sie eine Liste wünschen, verwenden Sie [] um den Ausdruck herum anstelle des () auf der Außenseite

    
Snakes and Coffee 02.05.2012 05:29
quelle
0

Python2.7 hat eine .items -Methode im Wörterbuch, die es erlaubt, über Tupel (Schlüssel, Wert) zu iterieren. Python3 hat dieselbe API (obwohl die Implementierung anders ist). Wird das für Sie funktionieren?

    
Noufal Ibrahim 02.05.2012 05:27
quelle

Tags und Links