Diccionarios y archivos

Uno de los usos más comunes de un diccionario es contar las ocurrencias de palabras en un archivo con algún texto escrito. Vamos comenzando con un archivo de palabras muy simple tomado del texto de Romeo y Julieta.

Para el primer conjunto de ejemplos, vamos a usar una versión más corta y más simplificada del texto sin signos de puntuación. Después trabajaremos con el texto de la escena con signos de puntuación incluidos.

Vamos a escribir un programa de Python para leer a través de las líneas del archivo, dividiendo cada línea en una lista de palabras, y después iterando a través de cada una de las palabras en la línea y contando cada palabra utilizando un diccionario.

Tenemos dos bucles for. El bucle externo está leyendo las líneas del archivo y el bucle interno está iterando a través de cada una de las palabras en esa línea en particular. Este es un ejemplo de un patrón llamado bucles anidados porque uno de los bucles es el bucle externo y el otro bucle es el bucle interno.

Como el bucle interno ejecuta todas sus iteraciones cada vez que el bucle externo hace una sola iteración, consideramos que el bucle interno itera “más rápido” y el bucle externo itera más lento.

La combinación de los dos bucles anidados asegura que contemos cada palabra en cada línea del archivo de entrada.

En nuestra sentencia else, utilizamos la alternativa más compacta para incrementar una variable. counts[word] += 1 es equivalente a counts[word] =
counts[word] + 1
. Cualquiera de los dos métodos puede usarse para cambiar el
valor de una variable en cualquier cantidad. Existen alternativas similares para
-=, *=, y /=.

Cuando ejecutamos el programa, vemos una salida sin procesar que contiene todos los contadores sin ordenar. (el archivo romeo.txt está disponible en es.py4e.com/code3/romeo.txt)

Es un poco inconveniente ver a través del diccionario para encontrar las palabras
más comunes y sus contadores, así que necesitamos agregar un poco más de código para mostrar una salida que nos ordene mejor el diccionario.