2010-09-08 5 views
17

Il dt python nativo predefinito garantisce che gli elenchi keys() e values() siano ordinati allo stesso modo?L'ordine di keys() e values ​​() nel dizionario python è lo stesso?

d = {'A':1, 'B':2, 'C':3, 'D':4 } # or any other content 
otherd = dict(zip(d.keys(), d.values())) 

Ho sempre d == otherd?

O è vero o falso, sono interessato a qualsiasi puntatore di riferimento sull'argomento.

PS: Capisco che la proprietà di cui sopra non sarà vera per tutti gli oggetti che si comportano come un dizionario, mi chiedo solo per il dettato incorporato. Quando provo sembra che sia vero, e non è una sorpresa perché avere lo stesso ordine per keys() e values() è probabilmente l'implementazione più semplice in ogni caso. Ma mi chiedo se questo comportamento sia stato esplicitamente definito o meno.

+0

In CPython 3.6 (e tutte le altre implementazioni di pitone che iniziano con 3.7), voci del dizionario rimanere nell'ordine in cui sono stati inserito in. – boris

risposta

29

Chiavi e valori sono elencati in un ordine arbitrario che non è casuale, varia attraverso le implementazioni Python e dipende dalla cronologia degli inserimenti e delle cancellazioni del dizionario. Se items(), keys(), values(), , iterkeys() e itervalues() vengono chiamati senza modifiche intermedie al dizionario, le liste corrisponderanno direttamente.

Da the documentation for dict.

+1

così d e otherd sarà sempre lo stesso. – shahjapan

4

Python 2.7 e superiori hanno ordered dictionaries, per il quale la sua dichiarazione:

d == dict(zip(d.keys(), d.values())) 

si applicherebbe

+0

come si applica già per ogni dizione, dovrebbe certamente essere vero per i dizionari ordinari – kriss

Problemi correlati