2010-12-29 11 views
54

tengo el siguiente código, que acaba de imprimir los pares clave/valor en un diccionario (los pares están ordenados por teclas):interactuando sobre pares clave/valor en un diccionario Weaver teclas

for word, count in sorted(count_words(filename).items()): 
    print word, count 

Sin embargo, llamando iteritems() en lugar de items() produce la misma salida

Ahora, ¿cuál debería elegir en esta situación? Consulté el Python tutorial pero realmente no responde mi pregunta.

Respuesta

76

En Python 2.x ambos le darán el mismo resultado. La diferencia entre ellos es que items construye una lista que contiene todo el contenido del diccionario, mientras que iteritems le proporciona un iterador que obtiene los elementos de uno en uno. En general, iteritems es una mejor opción porque no requiere tanta memoria. Pero aquí está ordenando el resultado, por lo que probablemente no hará una diferencia significativa en esta situación. Si tiene dudas, iteritems es una apuesta segura. Si el rendimiento realmente importa, mida ambos y vea cuál es más rápido.

En Python 3.x iteritems se ha eliminado y ahora hace lo itemsiteritems solían hacer, resolver el problema de los programadores perdiendo su tiempo a preocuparse por lo que es mejor. :)

Como nota al margen: si está contando ocurrencias de palabras, puede considerar usar collections.Counter en lugar de un dict simple (requiere Python 2.7 o posterior).

+0

+1 ¡Guau! No sabía que algo así existía. ¡Muy útil! – helpermethod

+7

+1 por mencionar la desactivación de iteritems en 3.x –

10

Según la respuesta de Marks: En Python 2, use iteritems(), en Python 3 use items().

Y además; Si necesita admitir ambos (y no use 2to3) use:

counts = count_words(filename) 
for word in sorted(counts): 
    count = counts[word] 
Cuestiones relacionadas