2015-02-27 16 views
5

La documentazione collections.OrderedDict descrive un OrderedDict comeOrderedDict: anche i valori sono ordinati?

un dict che ricorda l'ordine in cui le chiavi sono stati inseriti

così l'ordine di

for k in dict: 
    ... 

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

è prevedibile.

Tuttavia, non dice nulla sui valori. Se ho solo bisogno di scorrere i valori come segue, i risultati rispetteranno anche l'ordinamento per inserto?

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

Alcune prove rapide qui in CPython mostrato che sia il caso, ma che potrebbe essere solo coinicidental con l'implementazione corrente (non ho testato tutti gli altri).

risposta

7

Sì, gli elenchi di keys() e values() sono disposti in ordini corrispondenti in tutti i dict, not just in ordered ones. (L'ordine è arbitrario per dicts normali, ma è stesso ordine arbitrario per keys(), values() e items(), a meno che il dict è stato modificato nel frattempo.)

2

Sì, essi sono ordinati nello stesso ordine come il le chiavi sono Questo è lo stesso con tutte le implementazioni dict.

Chiavi e valori sono ripetuti su in un ordine arbitrario che è non casuale, varia attraverso implementazioni Python, e dipende storia del dizionario di inserzioni e delezioni. Se le chiavi, i valori e le viste degli articoli vengono ripetute senza modifiche intermedie al dizionario , l'ordine degli articoli corrisponderà direttamente. Ciò consente a la creazione di coppie (value, key) utilizzando zip(): pairs = zip(d.values(), d.keys()). Un altro modo per creare la stessa lista è pairs = [(v, k) for (k, v) in d.items()].

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

Problemi correlati