5.3.3 Operaciones con diccionarios

5.3.3 Operaciones con diccionarios

Obtener un elemento

Para obtener un elemento de un diccionario basta con escribir la clave entre corchetes. Veamos un ejemplo:

5.3.3 Operaciones con diccionarios

5.3.3 Operaciones con diccionarios

Si intentamos acceder a una clave que no existe, obtendremos un error:

5.3.3 Operaciones con diccionarios

Usando get()

Existe una función muy útil para «superar» los posibles errores de acceso por claves inexistentes. Se trata de get() y su comportamiento es el siguiente:

  1. Si la clave que buscamos existe, nos devuelve su valor.
  2. Si la clave que buscamos no existe, nos devuelve None4 salvo que le indiquemos otro valor por defecto, pero en ninguno de los dos casos obtendremos un error.

5.3.3 Operaciones con diccionarios

Línea 6: Equivalente a rae[’bifronte’].

Línea 9: La clave buscada no existe y obtenemos None.

Línea 11: La clave buscada no existe y nos devuelve el valor que hemos aportado por defecto.

Añadir o modificar un elemento

Para añadir un elemento a un diccionario sólo es necesario hacer referencia a la clave y asignarle un valor:

  • Si la clave ya existía en el diccionario, se reemplaza el valor existente por el nuevo.
  • Si la clave es nueva, se añade al diccionario con su valor. No vamos a obtener un error a diferencia de las listas.

Partimos del siguiente diccionario para ejemplificar estas acciones

5.3.3 Operaciones con diccionarios

Vamos a añadir la palabra enjuiciar a nuestro diccionario de la Real Academia de La Lengua:

5.3.3 Operaciones con diccionarios

Supongamos ahora que queremos modificar el significado de la palabra enjuiciar por otra acepción:

5.3.3 Operaciones con diccionarios

Supongamos ahora que queremos modificar el significado de la palabra enjuiciar por otra acepción:

5.3.3 Operaciones con diccionarios

Creando desde vacío

Una forma muy habitual de trabajar con diccionarios es utilizar el patrón creación partiendo de uno vacío e ir añadiendo elementos poco a poco.

Supongamos un ejemplo en el que queremos construir un diccionario donde las claves son las letras vocales y los valores son sus posiciones:

5.3.3 Operaciones con diccionarios

Nota: Hemos utilizando la función enumerate() que ya vimos para las listas en el apartado: Iterar usando enumeración.

Ejercicio

Construya un diccionario partiendo de una cadena de texto con el siguiente formato:

<city>:<population>;<city>:<population>;<city>:<population>;….

  • Claves: ciudades.
  •  Valores: habitantes (como enteros).

Ejemplo

  • Entrada: Tokyo:38_140_000;Delhi:26_454_000;Shanghai:24_484_000; Mumbai:21_357_000;São Paulo:21_297_000
  • Salida: {Tokyo: 38140000, Delhi: 26454000, Shanghai: 24484000, Mumbai: 21357000, São Paulo: 21297000}

Pertenencia de una clave

La forma pitónica de comprobar la existencia de una clave dentro de un diccionario, es utilizar el operador in:

5.3.3 Operaciones con diccionarios

Nota: El operador in siempre devuelve un valor booleano, es decir, verdadero o falso.

Ejercicio

Usando un diccionario, cuente el número de veces que se repite cada letra en una cadena de texto dada.

Ejemplo

  • Entrada: ‘boom’
  • Salida: {‘b’: 1, ‘o’: 2, ‘m’: 1}

Obtener todos los elementos

Python ofrece mecanismos para obtener todos los elementos de un diccionario. Partimos del siguiente diccionario:

5.3.3 Operaciones con diccionarios

Obtener todas las claves de un diccionario: Mediante la función keys():

5.3.3 Operaciones con diccionarios

Obtener todos los valores de un diccionario: Mediante la función values():

5.3.3 Operaciones con diccionarios

Obtener todos los pares «clave-valor» de un diccionario: Mediante la función items():

5.3.3 Operaciones con diccionarios

Nota: Para este último caso cabe destacar que los «items» se devuelven como una lista de tupias, donde cada tupla tiene dos elementos: el primero representa la clave y el segundo representa el valor.

Longitud de un diccionario

Podemos conocer el número de elementos («clave-valor») que tiene un diccionario con la función len():

5.3.3 Operaciones con diccionarios

Iterar sobre un diccionario

En base a los elementos que podemos obtener, Python nos proporciona tres maneras de iterar sobre un diccionario.

Iterar sobre claves:

5.3.3 Operaciones con diccionarios
Iterar sobre valores:

5.3.3 Operaciones con diccionarios

Iterar sobre «clave-valor»:

5.3.3 Operaciones con diccionarios

Nota: En este último caso, recuerde el uso de los «f-strings» para formatear cadenas de texto.

Ejercicio

Dado el diccionario de ciudades y poblaciones ya visto, y suponiendo que estas ciudades son las únicas que existen en el planeta, calcule el porcentaje de población relativo de cada una de ellas con respecto al total.

Ejemplo

  • Entrada: {Tokyo: 38140000, Delhi: 26454000, Shanghai: 24484000, Mumbai: 21357000, São Paulo: 21297000}
  • Salida: {Tokyo: 28.952722193544467, Delhi: 20.081680988673973, Shanghai: 18.58622050830474, Mumbai: 16.212461664591746, São Paulo: 16.16691464488507}

Combinar diccionarios

Dados dos (o más) diccionarios, es posible «mezclarlos» para obtener una combinación de los mismos. Esta combinación se basa en dos premisas:

  1. Si la clave no existe, se añade con su valor.
  2. Si la clave ya existe, se añade con el valor del «último» diccionario en la mezcla.6

Python ofrece dos mecanismos para realizar esta combinación. Vamos a partir de los siguientes diccionarios para ejemplificar su uso:

5.3.3 Operaciones con diccionarios

Sin modificar los diccionarios originales: Mediante el operador **:

5.3.3 Operaciones con diccionarios

A partir de Python 3.9 podemos utilizar el operador | para combinar dos diccionarios:

5.3.3 Operaciones con diccionarios

Modificando los diccionarios originales: Mediante la función update():

5.3.3 Operaciones con diccionarios

Nota: Tener en cuenta que el orden en el que especificamos los diccionarios a la hora de su combinación (mezcla) es relevante en el resultado final. En este caso el orden de los factores sí altera el producto.

Borrar elementos

Python nos ofrece, al menos, tres formas para borrar elementos en un diccionario: Por su clave: Mediante la sentencia del:

5.3.3 Operaciones con diccionarios

Por su clave (con extracción): Mediante la función pop() podemos extraer un elemento del diccionario por su clave. Vendría a ser una combinación de get() + del:

5.3.3 Operaciones con diccionarios

5.3.3 Operaciones con diccionarios

Borrado completo del diccionario:

1. Utilizando la función clear():

5.3.3 Operaciones con diccionarios

2. «Reinicializando» el diccionario a vacío con {}:

5.3.3 Operaciones con diccionarios

Nota: La diferencia entre ambos métodos tiene que ver con cuestiones internas de gestión de memoria y de rendimiento
5.3.4 Cuidado con las copias

Nivel intermedio

Al igual que ocurría con las listas, si hacemos un cambio en un diccionario, se verá reflejado en todas las variables que hagan referencia al mismo. Esto se deriva de su propiedad de ser mutable. Veamos un ejemplo concreto:

5.3.3 Operaciones con diccionarios

Una posible solución a este problema es hacer una «copia dura». Para ello Python proporciona la función copy():

5.3.3 Operaciones con diccionarios

5.3.3 Operaciones con diccionarios

Truco: En el caso de que estemos trabajando con diccionarios que contienen elementos mutables, debemos hacer uso de la función deepcopy() dentro del módulo copy de la librería estándar.

Publicaciones Similares