Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
>>> for i, h in {"server_out": "smtp.mail.yahoo.de", "server_in": "pop.mail.yahoo.de"}:
print i, h
Traceback (most recent call last):
File "<pyshell#8>", line 1, in -toplevel-
for i, h in {"server_out": "smtp.mail.yahoo.de", "server_in": "pop.mail.yahoo.de"}:
ValueError: too many values to unpack
In [22]: for key, value in {"server_out": "smtp.mail.yahoo.de", "server_in": "pop.mail.yahoo.de"}.iteritems():
....: print key, value
....:
server_in pop.mail.yahoo.de
server_out smtp.mail.yahoo.de
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
das hängt auch davon ab, was man braucht.
Braucht man einen Iterator, dann iteritems(). Braucht man eine Liste von Tupeln, nimmt man die Methode items(): [(<schluessel>, <wert>)] = {schluessel:wert}.items()
Oder ist die Methode veraltet??
Grüße,
Michael
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Zum Iterieren eignet sich besser .iteritems(), weil es keine Liste mit allen Elementen erstellt, sondern nur einen Iterator, der pro Durchlauf ein Schlüssel-Wert-Paar zurückgibt.
AFAIK soll in Zukunft (Py3K?) .iteritems() verschwinden und .items() ebenso wie .keys() und .values() *immer* einen Iterator zurückliefern. Das sollte man berücksichtigen.
Man könnte es so sehen: Lieber jetzt minimal langsameren Code und dafür bei Python 3K diese Methoden nicht anpassen müssen
Py3k ist noch nicht da, und wird noch eine Weile auf sich warten lassen. Warum sind immer alle so darauf versessen, Code zu einer Version kompatibel zu machen, die nicht existiert und nicht einmal spezifiziert ist?
Es geht ja nur darum, dass die .iter*()-Methoden zum Einen schon eine begrenzte Verfügbarkeit bescheinigt bekommen haben, zum Anderen Iteratoren in Zukunft bei vielen oder gar allen derartigen Funktionen und Methoden erwartet werden können (und zwar schon jetzt, unabhängig von Py3K), man also seinen Code im Hinblick darauf entwerfen und implementieren könnte. Dass bis dahin durchaus noch einige Zeit ins Land gehen kann, habe ich ja nicht bestritten. Man sollte es nur im Hinterkopf behalten und ich habe es auch hauptsächlich der Vollständigkeit halber genannt.
Ich programmiere lieber in *jetzt* aktuellem Python als mich auf eine Version einzulassen bei der weder die Änderungen, noch das Erscheinungsdatum im Detail feststehen.
BlackJack hat geschrieben:Ich programmiere lieber in *jetzt* aktuellem Python als mich auf eine Version einzulassen bei der weder die Änderungen, noch das Erscheinungsdatum im Detail feststehen.
Sehe ich auch so. Und wenn man so bedenkt, dass in Python 3k noch größere Änderungen angedacht sind, dann wird das Umbenennen von .iteritems() zu .items() wohl kaum das größte Problem darstellen. Da kann ich zur Not dann auch Search and Replace laufen lassen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
birkenfeld hat geschrieben:Zum Iterieren eignet sich besser .iteritems(), weil es keine Liste mit allen Elementen erstellt, sondern nur einen Iterator, der pro Durchlauf ein Schlüssel-Wert-Paar zurückgibt.
Hallo,
ganz mein Reden. Ich wollte auch nur sagen, dass ich mir einige Situationen vorstellen kann, in denen eben eine Liste erwartet wird, und kein Iterator (z.B. wird manchmal der Parametertyp in Fremdmethoden geprüft).
Grüße,
der Michel
Diese Nachricht zersört sich in 5 Sekunden selbst ...