2015-02-27 19 views
5

collections.OrderedDict Die Dokumentation beschreibt ein OrderedDict alsOrderedDict: Werden auch Werte bestellt?

eine dict, die die Reihenfolge erinnert, dass die Schlüssel

ersten

eingefügt wurden, so dass die Reihenfolge der

for k in dict: 
    ... 

for k in dict.keys(): 
    ... 

vorhersagbar ist.

Allerdings sagt es nichts über Werte. Wenn ich nur wie folgt über die Werte iterieren muss, werden die Ergebnisse auch die Reihenfolge-durch-einfügen berücksichtigen?

for v in dict.values(): 
    ... 

ein paar schnellen Tests hier in CPython zeigten, dass der Fall zu sein, aber das nur coinicidental mit der aktuellen Implementierung könnte (ich habe keine andere nicht getestet).

Antwort

7

Ja, die Listen nach keys() und values() sind in entsprechenden Reihenfolgen in allen dicts, not just in ordered ones angeordnet. (Die Reihenfolge ist beliebig für normale dicts, aber es ist die gleiche beliebige Reihenfolge für keys(), values() und items(), es sei denn, die dict in der Zwischenzeit geändert wurde.)

2

Ja, sie sind in der gleichen Reihenfolge wie die sortiert Schlüssel sind. Dies gilt für alle dict Implementierungen.

Schlüssel und Werte werden in einer beliebigen Reihenfolge iteriert über die nicht zufällig ist, variiert über Python-Implementierungen, und ist abhängig von der Geschichte des Wörterbuch von Einfügungen und Löschungen. Wenn Schlüssel, Werte und Elemente Ansichten ohne intervenierende Änderungen an dem Wörterbuch durchlaufen werden, wird die Reihenfolge der Elemente direkt entsprechen. Dies ermöglicht die Erstellung von (value, key) Paaren unter Verwendung zip(): pairs = zip(d.values(), d.keys()). Eine andere Möglichkeit, dieselbe Liste zu erstellen, ist pairs = [(v, k) for (k, v) in d.items()].

https://docs.python.org/3/library/stdtypes.html#dict-views