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?
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.
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.
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
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?
Tags und Links python python-3.x