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.
Ich versuche nun die werte aus den einzelenen Dictionaris auszulesen.
Wenn ich jetzt über die Liste Iteriere bekomme ich ein komische ergebnis und weiss nicht warum.
Eine Rückfrage hätte ich: Welche Python-Version setzt du ein?
Edit: Ich kann für ein aktuelles Python 2.6.x problemlos den Dokumentationsvorlesedienst spielen und erklären warum das angezeigt wird was angezeigt wird und was man machen müsste um es anders zu haben. Bei dem Codebeispiel handelt es sich allerdings um eine Syntax die mir bisher von Python nicht vertraut ist ...
Zuletzt geändert von /me am Dienstag 2. März 2010, 15:35, insgesamt 2-mal geändert.
.exe hat geschrieben:
Nein ich habe Python 2.5.4 im einsatz.
Result ist eine Rückgabe-Objekt von einem WebService
SyntaxError: invalid syntax
Warum machst du denen die dir helfen wollen die Arbeit schwerer? Für die Initialisierung der Datenstruktur solltest du wirklich funktionierenden Code angeben. Mit dem Verhau da kann man nur raten wie die Struktur sein soll.
Grundsätzlich solltest du dir aber klar machen, wie der von dir geschriebene Code mit Dictionaries umgeht. Lies mal http://docs.python.org/tutorial/datastr ... ctionaries und widme - nachdem du verstanden hast was passiert - der Methode iteritems() deine Aufmerksamkeit.
>>> carl = {'name': 'Carl', 'age': 56}
>>> for name, age in carl:
... print name, age
...
age 56
name Carl
>>> for name in carl:
... print name
...
age
name
Aber es gilt ja (leider) "explicit is better than implicit"...
@derdon: Ich bin verwirrt. Zeigst Du da wie es sich Deiner Meinung nach verhalten sollte, oder wie es sich tatsächlich verhält? Ich tippe mal auf letzteres, aber dann wüsste ich gerne mal was das machen soll?
derdon hat geschrieben:Aber es gilt ja (leider) "explicit is better than implicit"...
Das hat damit nichts zu tun. Python iteriert bei dicts nunmal standardmäßig über die Schlüssel. Punkt aus.
Demensprechend funktioniert „for a, b in dict“ auch, wenn die Schlüssel Tupel sind, was durchaus zulässig ist. Es wäre mehr als willkürlich wenn Python beim Iterieren über dicts, wenn man 2-Tupel auspackt, nicht über die Schlüssel, sondern über die Schlüssel-Wert Tupel iterieren würde. Und ansonsten wieder normal über die Keys.
Darii hat geschrieben:Python iteriert bei dicts nunmal standardmäßig über die Schlüssel. Punkt aus.
Und das gefällt mir nun mal nicht. Punkt aus. Meine Vorstellung kommt mir nicht willkürlich vor, aber vielleicht kannst du ja ein Codeschnipsel zeigen, damit ich dich besser verstehen kann.
derdon hat geschrieben:Und das gefällt mir nun mal nicht. Punkt aus. Meine Vorstellung kommt mir nicht willkürlich vor, aber vielleicht kannst du ja ein Codeschnipsel zeigen, damit ich dich besser verstehen kann.
dict3 = { "abc": 1, "def": 2 }
for a in dict3:
print a
for a, b in dict3:
print a, b
for a, b, c in dict3:
print a, b, c
# ----- #
abc
def
abc 1
def 2
a b c
d e f
Sprich, wenn man 2-tupel entpacken will, soll Python von dem üblichen Schema abweichen und *nicht* über die Schlüssel, sondern über die Schlüssel und Werte iterieren. Und was ist bei allgemeinen Iteratoren? D.h. Python soll bei for zusätzlich noch zwischen dicts und dem Rest unterscheiden? Was du willst erreicht man mit dict.items ohne irgendwelche Sonderregeln einzurichten.
Darii: Bei Zeile 6 soll eine Exception (TypeError oder SyntaxError, ka) geworfen werden,weil nur ein oder zwei Namen erlaubt sind. Es soll automatisch erkannt werden, ob man nur über die keys (d.h. ein Name zwischen `for` und `in`) oder über key und value iterieren möchte (d.h. sowas wie `for a,b in ...`). Im letzteren Fall soll "hinter den Kulissen" auf dict.iteritems() umgeschaltet werden.
derdon hat geschrieben:Darii: Bei Zeile 6 soll eine Exception (TypeError oder SyntaxError, ka) geworfen werden,weil nur ein oder zwei Namen erlaubt sind.
Warum auf unpacking in for-Schleifen verzichten? Nur damit ich mir bei dicts ein .items() sparen kann? Schlechter Tausch.
derdon hat geschrieben:Es soll automatisch erkannt werden, ob man nur über die keys (d.h. ein Name zwischen `for` und `in`) oder über key und value iterieren möchte (d.h. sowas wie `for a,b in ...`). Im letzteren Fall soll "hinter den Kulissen" auf dict.iteritems() umgeschaltet werden.