Curso de introducción a la programación en python

Autor: Luis Fernando Apáez Álvarez

Clase 16: Diccionarios y set.

Set

La colección de tipo set no mantiene un orden entre sus elementos, como lo hacían las tuplas o las listas; tampoco permite repetir elementos. Dentro de un set no es posible modificar los elementos ya almacenados, no obstante, si es posible agregar más elementos o eliminarlos. La idea detrás de un set es la de conjunto en matemáticas (de ahí que no se permitan elementos duplicados).

Podemos definir un set como sigue

donde no necesariamente se muestran los elementos en el orden en el que definimos el set. Podemos rescatar las siguientes funcionalidades en los set

Podemos comprobar que los sets no permiten elementos duplicados, por ejemplo agregemos 1 nuevamente a nuestro set primer_set:

donde sólo se muestra un 1 a pesar de tener uno ya almacenado y querer agregar otro. Continuemos viendo más propiedades

donde remove() nos puede arrojar un posible error si el elemento que queremos eliminar no se encuentra en nuestro set y donde discard() no arroja ningún error en este caso.

Finalmente

Diccionarios

La idea detrás de los diccionarios que conocemos habitualmente puede trasladarse al mundo de la programación. Recordemos que en un diccionario tenemos la palabra clave seguido de la definición correspondiente

diccionario

En python tendremos la misma idea de diccionario, donde a la palabra clave la denominaremos llave (key) y a la definición correspondiente lo conoceremos como valor (value). De tal manera los elementos dentro de los diccionarios estarán conformados de key:value. En el Proyecto1 parte 2 trabajamos brevemente con los diccionarios.

Por ejemplo, podemos crear un diccionario con la siguiente información:

en código tenemos

Cabe resaltar que los elementos dentro de un diccionario son de la forma key:value por lo que en nuestro caso el diccionario diccionario1 tiene 4 elementos. Si queremos acceder a un elemento debemos hacerlo mediante la llave, por ejemplo

Por otra parte, podemos recorrer todos los elementos de un diccionario utilizando un bucle for

sin embargo puede notarse cómo sólo nos arroja las llaves del diccionario, y como bien sabemos un elemento dentro de un diccionario está compuesto por una llave y por un valor. Para acceder a un elemento de manera completa utilizaremos diccionario1.items() lo que nos permitirá acceder a los elementos del diccionario de forma completa, es decir

Aunque la primera forma de recorrer los elementos de un diccionario utilizando un bucle for nos arroja como resultado las llaves de los elementos, existe un forma concreta de obtener dichas llaves. Así como utilizamos diccionario1.items() para acceder a los elementos completos, tenemos diccionario1.keys() para acceder únicamente a las llaves o diccionario1.values() para acceder a los valores de las llaves

Observaciones:

  1. Los diccionarios son mutables pero las llaves no. Por ejemplo, una lista no puede fungir como llave pues ésta es mutable.

  2. Las llaves son únicas. Si agregamos una llave repetida a un diccionario simplemente se sobreescribirá el valor correspondiente a esa llave.

  3. Los valores de las llaves pueden ser cualquier tipo de datos: cadenas, listas, números, etcétera. En el Proyecto1 parte 2 trabajamos con valores en forma de listas de comprensión.

  4. La diferencia entre diccionario1['Lunes'] que empleamos para acceder al valor de la llave 'Lunes' y diccionario1.get('Lunes') para la misma tarea, es que la primera nos arrojará una excepción si no encuentra la llave que le indicamos y la segunda no. De hecho, utilizar get() nos permite buscar, si existe, la llave en cuestión y como segundo parámetro podemos agregar un mensaje en caso de que dicha llave no exista (cabe resaltar que en todo momento el diccionario no será modificado), por ejemplo

Si no colocamos el mensaje por defecto se mostrará none cuando no se encuentre la llave que buscamos.

El último punto de la observación anterior sirve como preámbulo para ver el siguiente tema:

Setdefault

Ésta nos permitirá modificar el diccionario además de agregar valores por defecto. Por ejemplo, deseamos acceder a la llave 'Lunes' si es el caso que exista dentro de nuestro diccionario, caso contario deseamos que sea agregado al mismo con el valor 'Descanso'

como no se encontró la llave 'Lunes' dentro del diccionario se agregó con el valor que asignamos. Si por ejemplo utilizamos diccionario1.setdefault('Martes', 'Descanso') nuestro diccionario no se verá modificado pues la llave 'Martes' se encuentra ya dentro del diccionario.

En resumen get() nos permite acceder a una llave si es que existe y caso contrario puede mostrar un mensaje, sin embargo en todo momento el diccionario no fue modificado. En cambio, utilizando setdefault() podemos acceder a los valores de la llaves en el caso que existan éstas y caso contrario las agregaremos al diccionario con el valor indicado

pprint()

Existe un módulo que nos permite visualizar mejor la impresión de los diccionarios (en general de estructura de datos), dicho módulo es pprint(). Por ejemplo

la cual es una manera más amigable de visualizar el diccionario. Puede notarse que al realizarse la impresión de esta manera se ha colocado un orden ascendente, que en este caso es el orden alfabético pues estamos trabajando con cadenas de texto.

Socialmedia.PNG