Python: Recorriendo un diccionario de principio a fin

Objetivo: aprender a recorrer con un bucle for las claves, los valores o ambos de un diccionario en Python.

En numerosas ocasiones necesitaremos iterar a través de un diccionario mediante un bucle for. Voy a mostrarte lo sencillo que es y, para eso, te presentaré tres nuevos métodos que debes incorporar en tu kit de herramientas. Si has aterrizado en este artículo de modo casual y es la primera vez que te expones a los diccionarios en Python, te recomiendo que consultes el índice que figura en el menú o al final del artículo y estudies los artículos previos, que introducen los diccionarios desde cero.

Echa las manos al intérprete interactivo y genera un diccionario de pruebas:

>>> macedonia = {'plátano':'amarillo', 'fresa':'roja'}

Imagina que quieres trabajar con las claves de ese diccionario. ¿Cómo las obtenemos?

Empleando el método keys():

>>> frutas = macedonia.keys()
>>> frutas
dict_keys(['fresa', 'plátano'])

Si observas frutas, encontrarás las claves del diccionario, pero se trata de un objeto especial, claves de diccionario. Deja que te lo explique:

Lo que has obtenido es una vista del diccionario. Es como si observaras un objeto, el diccionario, desde una perspectiva diferente que sólo te permitiera apreciar determinadas características.

Hay dos cosas particularmente importantes en las vistas.

La primera es que lo que estás viendo a través de ellas es el objeto real. Si modificamos el diccionario, la vista se actualizará dinámicamente. Obśervalo.

Vamos a agregar un nuevo par clave-valor al diccionario y veamos qué sucede con la vista:

>>> macedonia['manzana'] = 'verde'
>>> macedonia
{'fresa': 'roja', 'plátano': 'amarillo', 'manzana': 'verde'}

¿Qué crees que contendrá ahora la vista frutas?

>>> frutas
dict_keys(['fresa', 'plátano', 'manzana'])

Como ves, se ha actualizado automáticamente sin necesidad de volvera a invocar al método?

La segunda particularidad de las vistas es que ya están preparadas para que puedas iterar sobre ellas:

>>> for fruta in frutas:
  print(fruta)

  
fresa
plátano
manzana

Tras lo cual hemos recuperado todas las claves del diccionario.

Si queremos iterar sobre los valores, en lugar de las claves, disponemos de otro método que genera una nueva vista:

>>> colores = macedonia.values()
>>> colores
dict_values(['roja', 'amarillo', 'verde'])

El método values() nos genera una vista sólo de valores sobre la que ya podemos iterar:

>>> for color in colores:
  print(color)

  
roja
amarillo
verde

Finalmente, ¿y si necesitamos iterar sobre las claves y sus correspondientes valores simultáneamente? La respuesta la encontrarás en el método items():

>>> elementos = macedonia.items()
>>> elementos
dict_items([('fresa', 'roja'), ('plátano', 'amarillo'), ('manzana', 'verde')])

Fíjate cómo iteramos ahora:

>>> for fruta, color in elementos:
  print(fruta, '-->', color)

  
fresa --> roja
plátano --> amarillo
manzana --> verde

Obviamente, no es necesaria la asignación previa de la vista. Tambień podrías haber escrito directamente esto:

>>> for fruta, color in macedonia.items():
  print(fruta, '-->', color)

Recuerda: las tres vistas son dinámicas y reflejan la situación actual del objeto.

Vamos a eliminar la fresa de la macedonia:

>>> del macedonia['fresa']
>>> macedonia
{'plátano': 'amarillo', 'manzana': 'verde'}

Y comprobemos nuestras preciosas vistas:

>>> macedonia
{'plátano': 'amarillo', 'manzana': 'verde'}
>>> frutas
dict_keys(['plátano', 'manzana'])
>>> colores
dict_values(['amarillo', 'verde'])
>>> elementos
dict_items([('plátano', 'amarillo'), ('manzana', 'verde')])

Pero, aunque el resultado sea el esperado, coincidirás conmigo que una macedonia sin fresas no es macedonia ni nada…

Javier Montero Gabarró


Python: Recorriendo un diccionario de principio a fin


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

Python – Consultando los valores de un diccionario

Objetivo: aprender diversas técnicas para consultar los valores de un diccionario en Python.

En esta tercera entrega dedicada a los diccionarios mostraremos cómo consultar los valores que contienen. Ya sabemos agregar o eliminar elementos (pares clave-valor), pero, ¿cómo realizamos consultas específicas?

El diccionario con el que trabajaremos hoy contiene información sobre unos personajes muy peculiares…

>>> gente = {'Pipi':'Calzaslargas', 'Bob':'Esponja',
   'Laura':'Ingalls', 'Sherlock':'Holmes'}

Comencemos determinando si nuestro diccionario contiene una clave concreta:

>>> 'Sherlock' in gente
True
>>> 'Dan' in gente
False

Hemos utilizado el operador in, un viejo conocido ya, para determinar la pertenencia. Podemos chequear, a su vez, la no pertenencia:

>>> 'Dan' not in gente
True

Es importante comprender que este uso sólo comprueba claves, pero no los valores correspondientes, como puedes apreciar en la siguiente instrucción:

>>> 'Esponja' in gente
False

En un próximo artículo aprenderemos métodos que nos permitirán obtener secuencias con las claves, los valores o con ambos, pero primero has de asegurarte de interiorizar bien esto.

Ya sabemos si una clave existe en un diccionario. Nuestra siguiente pregunta es: ¿cómo conocemos el valor que tiene asociado?

La forma más simple de extraer el valor de una determinada clave es utilizar la sintaxis siguiente:

diccionario[clave]

Consultemos qué valor tiene asignado la clave ‘Laura’:

>>> gente['Laura']
'Ingalls'

Si tratamos de consultar el valor de una clave inexistente tendríamos un serio problema:

>>> gente['Pedro']
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    gente['Pedro']
KeyError: 'Pedro'

Se produce un error y el programa se aborta. Más adelante, cuanto tratemos las excepciones, veremos el modo general que provee Python para controlar este tipo de errores, pero ahora veremos técnicas asociadas a los diccionarios para resolver este problema concreto.

Una forma obvia de gestionar este fallo sería realizar una comprobación de pertenencia antes de tratar de consultar el valor:

>>> if 'Pedro' in gente:
  print(gente['Pedro'])
else:
  print('Esta clave no existe')

  
Esta clave no existe

Pero disponemos de una manera más elegante. Deja que te presente el método get().

>>> gente.get('Laura')
'Ingalls'

Como ves, es lo mismo que haber hecho:

>>> gente['Laura']
'Ingalls'

Pero tiene una importante diferencia. Prueba ahora esto:

>>> gente.get('Pedro')

No devuelve nada, puesto que la clave no existe, pero, al menos, no provoca un error.

Y aún hay más: podemos indicar qué valor queremos que se devuelva para el caso en que la clave no exista:

diccionario.get(clave, valor_por_defecto)

>>> gente.get('Bugs', 'Esta clave no existe')
'Esta clave no existe'

Y, como decía un viejo amigo: That’s all folks!

Javier Montero Gabarró


Python – Consultando los valores de un diccionario


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

Python: Agregar y eliminar elementos de un diccionario

Objetivo: mostrar cómo agregar y eliminar elementos de un diccionario en Python.

En la anterior entrega explicamos el concepto de diccionario en Python y vimos el modo de crearlos. Hoy presentaremos dos técnicas básicas: la agregación y eliminación de elementos.

Comencemos con la creación de un par de diccionarios de ejemplo sobre los que practicaremos desde el intérprete interactivo:

>>> gazpacho = {}
>>> menda = {'Nombre':'Javier', 'Apellido':'Montero'}

El primero, gazpacho, es un simple diccionario vacío que utilizaremos para almacenar la receta del gazpacho; el otro, menda, recoge algunos datos sobre mi persona. Más adelante veremos que podemos crear estructuras de datos más complejas, basadas en los diccionarios, que podremos emplear para mantener una agenda de nuestros contactos personales y sin necesidad de recurrir a un gestor de bases de datos.

Para agregar un par clave-valor a un diccionario, recurrimos a la siguiente sintaxis:

diccionario[clave] = valor

Probémoslo con gazpacho:

>>> gazpacho['Aceite'] = '300 ml'

Verificamos que gazpacho, que antes estaba vacío, ahora contiene ese par:

>>> gazpacho
{'Aceite': '300 ml'}

Continuemos con la receta secreta:

>>> gazpacho['Vinagre'] = '100 ml'
>>> gazpacho['Pepino'] = 1
>>> gazpacho['Pimiento'] = 1

Veamos cómo evoluciona nuestra creación:

>>> gazpacho
{'Pimiento': 1, 'Aceite': '300 ml', 'Vinagre': '100 ml', 'Pepino': 1}

Observa la salida de esta última instrucción y recuerda lo que dijimos sobre el orden de los diccionarios: no son una estructura ordenada, aunque veremos formas de hacerlos más presentables si lo deseamos.

Añadamos nuevos elemendos al menda:

>>> menda['URL'] = 'http://www.elclubdelautodidacta.es'
>>> menda['Twitter'] = '@pradery'

tras lo cual,

>>> menda
{'URL': 'http://www.elclubdelautodidacta.es', 'Nombre': 'Javier', 'Twitter': '@pradery', 'Apellido': 'Montero'}

Las claves han de ser únicas. Si tratamos de agregar otra ya existente, simplemente el valor nuevo sustituirá al antiguo:

>>> gazpacho['Pimiento'] = 2
>>> menda['URL'] = 'http://elclubdelautodidacta.es/wp/'

Observa cómo los valores correspondientes son actualizados:

>>> gazpacho
{'Pimiento': 2, 'Aceite': '300 ml', 'Vinagre': '100 ml', 'Pepino': 1}
>>> menda
{'URL': 'http://elclubdelautodidacta.es/wp/', 'Nombre': 'Javier', 'Twitter': '@pradery', 'Apellido': 'Montero'}

Para borrar un par clave-valor de un diccionario disponemos de la sentencia del, que emplearemos del siguiente modo:

del diccionario[clave]

Por ejemplo:

>>> del gazpacho['Aceite']
>>> gazpacho
{'Pimiento': 2, 'Vinagre': '100 ml', 'Pepino': 1}

>>> del menda['URL']
>>> menda
{'Nombre': 'Javier', 'Twitter': '@pradery', 'Apellido': 'Montero'}

Con del podríamos cargarnos incluso el objeto completo:

>>> del gazpacho

A partir de este momento el gazpacho ha dejado de existir y ha pasado a mejor vida:

>>> gazpacho
Traceback (most recent call last):
  File "<pyshell#28>", line 1, in <module>
    gazpacho
NameError: name 'gazpacho' is not defined

Y con menda mejor no lo hago, no sea que traiga mala suerte…

Javier Montero Gabarró


Python: Agregar y eliminar elementos de un diccionario


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

Python: Introducción a los diccionarios

Objetivo: entender el concepto de diccionario en Python y aprender cómo se crean.

Tengo el placer de presentarte los diccionarios de Python, estructuras de datos fascinantes y tremendamente adictivas. Con frecuencia, cuando necesito resolver mediante programación alguna necesidad, me encuentro con que los diccionarios me vienen a la cabeza de un modo natural. Son objetos muy poderosos, como irás comprobando.

Ya sabes, en otro sentido, lo que es un diccionario, llevas toda tu vida manejándolos. Abre uno cualquiera por una página al azar y dime qué ves.

Un conjunto de términos y sus definiciones, no es más que eso. Un conjunto de claves (las palabras) y sus correspondientes valores (las definiciones).

Un diccionario en Python es, en esencia, lo mismo: una colección de pares formados por claves y definiciones.

Las claves no tienen que ser, necesariamente, palabras: puede servir cualquier tipo que sea inmutable, como los números o los strings. O incluso estructuras más complejas como las tuplas (que ya sabes que son inmutables, en oposición a las listas), pero con la condición de que los elementos que las componen sean también inmutables (por ejemplo, que dentro de una tupla no exista una lista). Más adelante comprenderemos el porqué de estas “manías” que tienen las claves de los diccionarios. Los valores, en cambio, no tienen estas restricciones y pueden ser de cualquier tipo.

Hay un concepto que diferencia a los diccionarios Python de los de papel de toda la vida. En estos, las palabras (claves) están ordenadas alfabéticamente, de la a a la z. Sin embargo, aunque muchas veces nos dará la sensación de lo contrario, no hay ordenación implícita en los elementos de un diccionario en Python. Veremos que existen métodos que nos permitirán, si lo necesitamos, poner orden en ese caos, pero hazte a la idea de que los diccionarios no son estructuras ordenadas. Si te gustaba la analogía con el diccionario de papel, imagínala como si hubieras recortado todos los pares término-definición y los hubieras metido en un saco, perdiendo así su orden natural.

Pongámonos manos a la obra ya. Vamos a crear un diccionario sencillo que nos sirva para asociar a cada uno de nuestros amigos con su fecha de cumpleaños. Por ejemplo:

'Marta': '25 de abril'
'José Luis' : '5 de diciembre'

En este ejemplo, todas las claves y los valores son de tipo string, por eso los he incluido entre comillas (da igual que sean simples o dobles), pero no tendría por qué haber sido así. Nada nos impediría, tampoco, introducir un par clave-valor así:

456 : '14 de mayo'

Es decir, ni las claves ni los valores tienen por qué mantener homogeneidad en sus tipos. Naturalmente, no tendría sentido en nuestro problema particular, pero sería un par válido.

Fíjate cómo hemos separado las claves de los valores empleando dos puntos.

Para crear el diccionario, separamos cada par mediante comas y rodeamos todo el conjunto entre llaves:

>>> cumpleaños = {'Marta': '25 de abril', 'José Luis' : '5 de diciembre'}

Comprobemos el tipo de este objeto:

>>> type(cumpleaños)
<class 'dict'>

Y su valor:

>>> cumpleaños
{'Marta': '25 de abril', 'José Luis': '5 de diciembre'}

Una regla de oro que cumplen los diccionarios es que las claves han de ser únicas. Si tratas de agregar un elemento con la misma clave que otro ya existente, simplemente el valor nuevo sobreescribirá al antiguo.

Para crear un diccionario vacío procedemos del siguiente modo:

>>> dicci = {}   # Un simple par de llaves sin nada dentro
>>> type(dicci)
<class 'dict'>

Ya sabemos crear diccionarios, vacíos o con pares clave-valor dentro. Próximamente aprenderemos a agregar o eliminar datos de estas estructuras ya creadas.

Javier Montero Gabarró


Python: Introducción a los diccionarios


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.