usando zip en claves y valores de dictado

Estoy un poco confundido por este párrafo en python docs para dict clase

Si se llaman elementos(), claves(), valores(), iteritems(), iterkeys() e itervalues() sin modificar el diccionario, las listas se corresponderán directamente. Esto permite la creación de pares (valor, clave) usando zip(): pares = zip(d.valores(), d.claves())

qué quiere decir called with no intervening modifications ?

si recibo una instancia de dictado que fue arrojada por alguna función (no tengo forma de saber si los elementos se modificaron desde que se creó el dictado) ... ¿puedo seguir usando el zip(d.values(),d.keys()) ?

preguntado el 31 de julio de 12 a las 12:07

1 Respuestas

Sí, es compatible.

El punto es que no debes modificar d entre llamar d.values() y d.keys().

Respondido 31 Jul 12, 13:07

Interesante porque la compilación de la lista se ejecuta más rápido para mí en Python 2.7. 0.53 usec para lista comp en comparación con 0.692 usec para zip - Jamylak

@jamylak Eliminaré ese reclamo entonces. - Lauritz V. Thaulow

Bien, aquí están las pruebas que hice de todos modos: python -m timeit -s "d = {'a':1, 'b':2, 'c':3}" "[(y, x) for x, y in d.items()]" 1000000 loops, best of 3: 0.527 usec per loop python -m timeit -s "d = {'a':1, 'b':2, 'c':3}" "zip(d.values(), d.keys())" 1000000 loops, best of 3: 0.685 usec per loop - Jamylak

@jamylak: al ejecutar sus pruebas, también obtengo comparaciones de listas más rápidas. (1.4 usec frente a 1.72 usec python 2.7.3, OS-X) y 1.38 usec frente a 1.65 usec en python 2.6.4) - mgilson

Intenté una nueva prueba donde zip es más rápido para un más grande dict: python -m timeit -s "d = dict(zip(range(20), range(20)))" "zip(d.values(), d.keys())" 1000000 loops, best of 3: 1.5 usec per loop python -m timeit -s "d = dict(zip(range(20), range(20)))" "[(y, x) for x, y in d.items()]" 100000 loops, best of 3: 2.39 usec per loop - Jamylak

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.