2010-09-08 15 views
17

Does dict pitón incorporados nativos garantizan que los keys() y values() listas están ordenadas de la misma manera?¿Se garantiza que el orden de las claves() y values ​​() en el diccionario python será el mismo?

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

¿Siempre tengo d == otherd?

O es verdadera o falsa, estoy interesado en cualquiera puntero de referencia sobre el tema.

PS: Yo entiendo la propiedad anterior no será válido para todos los objetos que se comportan como un diccionario, me pregunto para el dict incorporado. Cuando la prueba se ve como si es verdad, y no es de extrañar ya que tener el mismo orden para keys() y values() es probablemente la más simple aplicación de todos modos. Pero me pregunto si este comportamiento fue explícitamente definido o no.

+0

En CPython 3.6 (y todas las demás implementaciones pitón comenzando con 3.7), los elementos del diccionario permanecer en el orden en que fueron insertado en. – boris

Respuesta

29

claves y los valores se enumeran en un orden arbitrario que es no aleatoria, varía a través de las implementaciones de Python, y depende de la historia del diccionario de inserciones y deleciones. Si se llaman items(), keys(), values(), iteritems(), iterkeys() y itervalues() sin modificaciones intermedias en el diccionario, las listas se corresponderán directamente.

De the documentation for dict.

+1

por lo que d y otherd siempre serán lo mismo. – shahjapan

4

Python 2.7 y anteriores tienen ordered dictionaries, para los cuales su declaración:

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

se aplicaría

+0

, ya que se aplica a todos los dictionarios, aún debería ser cierto para dictionarios ordenados – kriss

Cuestiones relacionadas