Die Reihenfolge der Schlüssel in dictionaries
Code:
d = {'a': 0, 'b': 1, 'c': 2}
l = d.keys()
print l
Diese Drucke ['a', 'c', 'b']
. Ich bin mir nicht sicher, wie die Methode keys()
bestimmt die Reihenfolge der keywords innerhalb l. Allerdings würde ich gerne können ermittelt werden die keywords in der "richtigen" Reihenfolge. Die richtige Reihenfolge natürlich würde die Liste erstellen ['a', 'b', 'c']
.
- Wenn Python dictionaries sind, wie die meisten, die Sie eigentlich sind hash-Tabellen. Unter anderem bedeutet das, dass die Reihenfolge der Schlüssel ist nicht garantiert oder festgelegt. Insbesondere würde es mich nicht erinnern, die Reihenfolge, in der die Schlüssel werden Hinzugefügt.
- mögliche Duplikate von Warum ist python Bestellung mein Wörterbuch wie so?
- Diese grösste Teil von essentually bedeutet, dass Ihr Programm wird indeterministic wenn Sie die Schleife über die Elemente, die in einem Wörterbuch?
- Ich würde nicht so weit gehen; es ist immer noch sehr vorhersehbares Verhalten gibt. Jede volle iteration sieht genau jedes Schlüssel/Wert-paar. Und in den meisten Sprachen, werden Sie auch sehen, wie Sie in der gleichen Reihenfolge jedes mal. Es sei denn, die docs Garantie einer bestimmten Reihenfolge, aber Sie darf nicht damit rechnen, dass es die Reihenfolge, die Sie wollen. (Einige Sprachen (wie Perl) tatsächlich in zufälliger Reihenfolge ein bisschen-angeblich aus Sicherheitsgründen, aber ich denke, es ist wirklich nur schütteln Sie Locker aus der Gewohnheit, sich auf unbestimmte Verhalten. 🙂 Ich glaube nicht, Python ist ganz böse, aber eh...)
- Die Bestellung werden die gleichen sein, die Bereitstellung der dict wurde nicht geändert. Aus der Anleitung: "Wenn items(), keys(), values(), iteritems(), iterkeys(), und itervalues() aufgerufen, mit keine eingreifenden änderungen an dem Wörterbuch, die Listen werden direkt entsprechen. Dies ermöglicht die Erstellung von (Wert, Schlüssel) Paare mit zip(): Paare = zip(d....Werte(), d....keys())."
- Dies ist nicht für mich arbeiten, zumindest nicht in python 3.4. Ich bin der Erstellung einer einfachen 4-Tasten-Wörterbuch und sofort eine Schleife über mit .- Tasten(), und die Ordnung verloren.
- 2.7.10 python: >>> d = {'was':1, '': 2, 'Teufel':3, 'is':4, 'dies':5} >>> d....keys() ['dies', 'was', 'Teufel', 'das', 'ist']
- Ich denke, was steveayre gemeint ist, dass die Reihenfolge ist die gleiche, zwischen dem, was Sie erhalten unter Verwendung der verschiedenen Methoden erwähnt, nicht das gleiche wie die ordrer, in denen die Elemente geschrieben wurden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie OrderedDict (benötigt Python 2.7) oder höher.
Beachten Sie auch, dass
OrderedDict({'a': 1, 'b':2, 'c':3})
wird nicht funktionieren, da diedict
erstellen Sie mit{...}
hat schon wieder vergessen die Reihenfolge der Elemente. Statt, die Sie verwenden möchtenOrderedDict([('a', 1), ('b', 2), ('c', 3)])
.Wie in der Dokumentation erwähnt, für Versionen niedriger als Python 2.7, die Sie verwenden können, diese Rezept.
Python 3.7+
In Python 3.7.0 die einfügen -, um die Erhaltung der Natur der
dict
Objekte erklärt wurde sein offizieller Bestandteil der Sprache Python spec. Daher können Sie davon abhängen.Python 3.6 (CPython)
Als Python-3.6, für die CPython-Implementierung von Python, Wörterbücher pflegen, einsetzen, um standardmäßig. Dies wird als eine Implementierung detail allerdings; sollten Sie dennoch mit
Sammlungen.OrderedDict
wenn Sie möchten, dass die insertion der Bestellung, die garantiert über andere Implementierungen von Python.Python >=2.7 und <3.6
Verwenden Sie die
Sammlungen.OrderedDict
Klasse, wenn Sie brauchen einedict
dassmerkt sich die Reihenfolge der Elemente eingefügt.
Verwenden Sie die sortiert-Funktion, die Art der wiederholenden übergeben.
Den
.keys()
Methode gibt die Tasten in beliebiger Reihenfolge.Sortieren Sie die Liste, wenn Sie es verwenden möchten.
Vom http://docs.python.org/tutorial/datastructures.html:
"Der keys () - Methode eines dictionary-Objektes gibt eine Liste aller Schlüssel in das Wörterbuch, in beliebiger Reihenfolge (wenn Sie es wollen sortiert, nur werden die sortierten () - Funktion)."
Obwohl die Reihenfolge keine Rolle, so das Wörterbuch, ist die hashmap. Es hängt von der Reihenfolge wie Sie gedrückt wird, in:
Ausgabe:
für string-abbc, die Tasten sind dict_keys(['a', 'b', 'c'])
für string-cbab, die Tasten sind dict_keys(['c', 'b', 'a'])