Mein dictionary sieht so aus:
dic['1'] = {'key1': value1, 'key1': value2}
dic['2'] = {'key1':value12, 'key2': value22}
...
Wenn ich jetzt darüber iteriere:
for item in dic:
print(item)
Wird die Liste absteigend herum ausgegeben:
47, 46, 45...
Obwohl ich in der aufsteigenden Reihenfolge 1, 2, 3 hinzugefügt habe. Das selbe tritt auch bei "for item in dic.keys()" auf. Verwende ich eine Liste, wird aufsteigend ausgegeben. Was ich möchte.
Was ist der Grund für die absteigende Reihenfolge?
Ich dachte dictionaries werden immer in der Reihenfolge ausgegeben, in der sie abgelegt worden.
Ich verwende momentan diesen Workaround:
list = dic.keys()
list.sort()
for item in list
print dic[item]
Das funktioniert dann aufsteigend.
Danke,
Steffen
Reihenfolge der Werte beim Iterieren über ein Dictionary
Dictionarys speichern nicht die Reihenfolge, sondern werten nur Keys -> Values aus.
Was du suchst ist das OrderedDict, das ab 2.7 oder 3.x verfügbar ist. Alternativ kannst du auch eine andere Implementierung aus dem Internet nutzen.
Was du suchst ist das OrderedDict, das ab 2.7 oder 3.x verfügbar ist. Alternativ kannst du auch eine andere Implementierung aus dem Internet nutzen.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Hallo!
Die Reihenfolge der Schlüssel ist beliebig, daher kannst du dich nicht darauf verlassen, dass sie in irgend einer bestimmten Reihenfolge übergeben werden.
Schau dir mal http://docs.python.org/dev/library/coll ... rderedDict an, das sollte dir weiterhelfen.
Sebastian
Die Reihenfolge der Schlüssel ist beliebig, daher kannst du dich nicht darauf verlassen, dass sie in irgend einer bestimmten Reihenfolge übergeben werden.
Schau dir mal http://docs.python.org/dev/library/coll ... rderedDict an, das sollte dir weiterhelfen.
Sebastian
Das Leben ist wie ein Tennisball.
Hier hilft dann die Konsultation der Dokumentation. Unter http://docs.python.org/tutorial/datastr ... ctionaries findest du den Satz: "It is best to think of a dictionary as an unordered set of key: value pairs, [...]"stesind hat geschrieben:Ich dachte dictionaries werden immer in der Reihenfolge ausgegeben, in der sie abgelegt worden.
Danke für die schnellen Antworten!
Das ein dic nicht sortiert ist, ist schon klar. Mir reicht ja ein Verhalten wie ein Stack/Listen. Also last in last out.
Gegenwärtig werden bei mir die Werte ja lifo ausgegeben. Also genau anders herum.
Scheint, ich muss bei meinem Workaround bleiben.
Danke,
Steffen
Das ein dic nicht sortiert ist, ist schon klar. Mir reicht ja ein Verhalten wie ein Stack/Listen. Also last in last out.
Gegenwärtig werden bei mir die Werte ja lifo ausgegeben. Also genau anders herum.
Scheint, ich muss bei meinem Workaround bleiben.
Danke,
Steffen
Offensichtlich nicht. Wie bereits gesagt, bedeutet "nicht sortiert" hier, dass die Daten völlig unabhängig von der Reihenfolge des Schreibens gespeichert werden. Insofern ist auch die Reihenfolge beim Auslesen nicht definiert.stesind hat geschrieben:Das ein dic nicht sortiert ist, ist schon klar.
MfG
HWK
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Das ist aber reiner "Zufall", d.h. Du kannst dieses Verhalten nicht bei allen Python Implementierungen voraussetzen.stesind hat geschrieben:Nur um noch mal klarzustellen, bei mir wird das dic absteigend sortiert ausgegeben!
Oder einfach mal ein Gegenbeispiel zu deiner These:
Code: Alles auswählen
>>> dict(zip("abcdefg", "abcdefg"))
{'a': 'a', 'c': 'c', 'b': 'b', 'e': 'e', 'd': 'd', 'g': 'g', 'f': 'f'}
Das Leben ist wie ein Tennisball.
Warum verwendest du dann überhaupt ein dict? Wenn du nur ein Stack-Verhalten benötigst, reicht doch eine Liste (oder performanter gibt es noch collections.deque).stesind hat geschrieben:Das ein dic nicht sortiert ist, ist schon klar. Mir reicht ja ein Verhalten wie ein Stack/Listen. Also last in last out.