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:
Si intentamos acceder a una clave que no existe, obtendremos un error:
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:
- Si la clave que buscamos existe, nos devuelve su valor.
- 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.
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
Vamos a añadir la palabra enjuiciar a nuestro diccionario de la Real Academia de La Lengua:
Supongamos ahora que queremos modificar el significado de la palabra enjuiciar por otra acepción:
Supongamos ahora que queremos modificar el significado de la palabra enjuiciar por otra acepción:
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:
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:
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:
Obtener todas las claves de un diccionario: Mediante la función keys():
Obtener todos los valores de un diccionario: Mediante la función values():
Obtener todos los pares «clave-valor» de un diccionario: Mediante la función items():
Longitud de un diccionario
Podemos conocer el número de elementos («clave-valor») que tiene un diccionario con la función len():
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:
Iterar sobre valores:
Iterar sobre «clave-valor»:
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:
- Si la clave no existe, se añade con su valor.
- 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:
Sin modificar los diccionarios originales: Mediante el operador **:
A partir de Python 3.9 podemos utilizar el operador | para combinar dos diccionarios:
Modificando los diccionarios originales: Mediante la función update():
Borrar elementos
Python nos ofrece, al menos, tres formas para borrar elementos en un diccionario: Por su clave: Mediante la sentencia del:
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:
Borrado completo del diccionario:
1. Utilizando la función clear():
2. «Reinicializando» el diccionario a vacío con {}:
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:
Una posible solución a este problema es hacer una «copia dura». Para ello Python proporciona la función copy():
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.