Es sieht so aus, als ob die von keys()
und values()
Methoden eines Wörterbuchs zurückgegebenen Listen immer eine 1-zu-1-Zuordnung sind (vorausgesetzt, das Wörterbuch wird zwischen dem Aufrufen der beiden Methoden nicht geändert).
Zum Beispiel:
>>> d = {'one':1, 'two': 2, 'three': 3}
>>> k, v = d.keys(), d.values()
>>> for i in range(len(k)):
print d[k[i]] == v[i]
True
True
True
Wenn Sie das Wörterbuch zwischen Aufrufen keys()
und Aufrufen nicht ändern values()
, ist es falsch anzunehmen, dass die obige for-Schleife immer True ausgibt? Ich konnte keine Dokumentation finden, die dies bestätigt.
Antworten:
Ich habe es gefunden:
Auf 2.x Dokumentation und 3.x Dokumentation .
quelle
Ja, was Sie beobachtet haben, ist in der Tat eine garantierte Eigenschaft - Schlüssel (), Werte () und Elemente () geben Listen in kongruenter Reihenfolge zurück, wenn das Diktat nicht geändert wird. iterkeys () & c iterieren ebenfalls in derselben Reihenfolge wie die entsprechenden Listen.
quelle
dataframe
bietet Pandas eine Alternative, bei der Elemente aktualisiert oder gelöscht werden können und die Reihenfolge und die Indexpositionen der Elemente in einer diktartigen Struktur unverändert bleiben.Ja, es ist in Python 2.x garantiert :
quelle
Ja. Ab CPython 3.6 geben Wörterbücher Elemente in der Reihenfolge zurück, in der Sie sie eingefügt haben .
Ignorieren Sie den Teil, der besagt, dass dies ein Implementierungsdetail ist. Dieses Verhalten ist in CPython 3.6 garantiert und für alle anderen Python-Implementierungen ab Python 3.7 erforderlich .
quelle
Gute Verweise auf die Dokumente. So können Sie die Bestellung unabhängig von der Dokumentation / Implementierung garantieren:
quelle
Gemäß http://docs.python.org/dev/py3k/library/stdtypes.html#dictionary-view-objects geben die Methoden keys (), values () und items () eines Diktats entsprechende Iteratoren zurück, deren Reihenfolge entsprechen. Ich kann jedoch keinen Verweis auf die offizielle Dokumentation für Python 2.x für dieselbe Sache finden.
Soweit ich das beurteilen kann, lautet die Antwort ja, aber nur in Python 3.0+
quelle
Für das, was es wert ist, basiert ein stark gebrauchter Produktionscode, den ich geschrieben habe, auf dieser Annahme und ich hatte nie ein Problem damit. Ich weiß, das macht es aber nicht wahr :-)
Wenn Sie das Risiko nicht eingehen möchten, würde ich iteritems () verwenden, wenn Sie können.
quelle
Ich war mit diesen Antworten nicht zufrieden, da ich sicherstellen wollte, dass die exportierten Werte auch bei Verwendung verschiedener Diktate dieselbe Reihenfolge hatten.
Hier geben Sie die Schlüsselreihenfolge im Voraus an. Die zurückgegebenen Werte haben immer dieselbe Reihenfolge, auch wenn sich das Diktat ändert oder Sie ein anderes Diktat verwenden.
quelle