2011-12-02 10 views

Respuesta

6

Sí, siempre es cierto. Garantizado por Python si no hay modificaciones intermedias para el dependiente.

especificación relevante: http://docs.python.org/library/stdtypes.html#dict.items

Esto es mejor en general, tanto porque protege contra la dict ir fuera de sincronización y utiliza insignificante memoria adicional:

dict((k,v) for k,v in d.iteritems())

+2

Sin embargo, el desempaquetado es innecesario, 'dict (d.iteritems())' funciona igual de bien. Para el caso, la mayoría de los dicts (incluyendo los 'dict') asignaciones de casos especiales (sobre los iterables en general) y lo hacen de todos modos, aunque no estoy seguro de si es universal. – delnan

+0

@delnan ha votado a favor su comentario, pero creo que mantenerse cerca del ejemplo tiene sentido aquí. – Triptych

+0

En realidad, nunca querría hacer 'dict ((k, v) para k, v en d.iteritems())' o 'dict (d.iteritems())' porque 'd.copy()' es mucho mejor . – Gabe

2

Si estás preguntando si el las claves y los valores se devuelven en el mismo orden, la respuesta es Sí. El documentation dice:

Si items(), keys(), values(), iteritems(), iterkeys() y itervalues() son llamados sin necesidad de modificaciones que intervienen en el diccionario, las listas directamente corresponderán.

Si estás preguntando si dict(zip(d.keys(), d.values())) == d siempre se evaluará como true en todas las circunstancias, la respuesta es No. Usted puede tener múltiples hilos, con un cambio de d mientras que el otro está ejecutando d.keys(), d.values() o dict(...). Esto creará modificaciones intermedias, invalidando las condiciones citadas anteriormente.

2

Sí, este es un comportamiento garantizado :-)

Las claves y los valores se dan en el mismo orden que devuelve d.Items: http://docs.python.org/library/stdtypes.html#dict.items

Nota, en entornos multi-hilo se es mejor extraer d.items() todos a la vez en lugar de arriesgarse a una mutación entre llamadas sucesivas a d.keys() y d.values().

Cuestiones relacionadas