Python 🐍 : Estructura de Datos - Diccionarios
En Python, un diccionario (dict
) es usado para almacenar una colección de valores en la forma de clave-valor (key-value). Si vienes de otros lenguajes de programación como JavaScript, podemos decir que los diccionarios son similares a los objetos. Los diccionarios de Python pueden almacenar tanto su clave como su valor con contenido de diferentes tipos.
¿Qué es un Diccionario de Python?
En Python, un diccionario es una estructura de datos que almacena un conjunto de pares de clave:valor
y es una colección no ordenada, modificable e indexada que no permite duplicados. Se define con llaves {}
y contiene pares de clave:valor
.
Los diccionarios funcionan de forma análoga a los diccionarios en la vida real, aunque con algunas diferencias. Por ejemplo, un diccionario de idiomas:
Palabra (clave) | Significado (valor) |
---|---|
“hola” | Saludo amistoso |
“adiós” | Despedida |
“libro” | Objeto con páginas |
En Python sería:
1
2
3
4
5
diccionario_espanol = {
"hola": "Saludo amistoso",
"adiós": "Despedida",
"libro": "Objeto con páginas"
}
En los diccionarios reales, las palabras están ordenadas alfabéticamente. En Python, desde la versión 3.7+, el orden de inserción se conserva, pero no están ordenados alfabéticamente.
En los diccionarios, una definición suele ser una cadena de texto. En Python, los valores pueden ser cualquier cosa: números, listas, otros diccionarios, funciones, objetos, etc.
Características importantes de los diccionarios
Un diccionario de Python tiene las siguientes características:
- Mantienen un orden
- esto quiere decir que se respeta en el orden que se insertan las claves.
- Es mutable
- esto significa que los diccionarios no tienen un tamaño predefinido y que su contenido puede aumentar o disminuir según las necesidades.
- Son dinámicos
- los diccionarios pueden contener diferentes tipos de datos tanto el valor como la clave. Esto significa que también pueden soportar paquetes multidimensionales de datos, como una lista o muchos objetos. Sin embargo se recomiendan usar los cadenas (strings) como claves.
- Clave única
- esencialmente, esto quiere decir que los diccionarios no pueden tener claves duplicadas, ya que de lo contrario nos va a sustituir la clave existente.
- Son de rápido acceso
- esto debido a la forma en la que están implementados internamente.
Crear Diccionarios
Para crear un diccionario en Python se utilizan las llaves {}
de apertura y cierre. Cada ítem debe estar compuesto por un par clave:valor
, y cada par debe estar separado de otro par clave:valor
por comas (,
). Por ejemplo:
1
2
3
4
5
mis_datos = {
"nombre": "Marco",
"edad": 32,
"ciudad": "Coquimbo"
}
Aunque está permitido, NO uses nombres como
dict
en variables porque vas a romper la funcióndict()
que nos permite crear diccionarios.
Sin embargo no es la única forma, ya que Python nos provee la función dict()
para la creación de diccionarios.
Una forma es pasarle una lista de tuplas a la función dict()
:
>>> mis_datos = dict([('nombre', 'Marco'), ('edad', 32), ('ciudad', 'Coquimbo')])
>>> mis_datos
{'nombre': 'Marco', 'edad': 32, 'ciudad': 'Coquimbo'}
Otra forma es pasar la clave como nombre de argumento y asignarle el valor:
>>> mis_datos = dict(nombre='Marco', edad=32, ciudad='Coquimbo')
>>> mis_datos
{'nombre': 'Marco', 'edad': 32, 'ciudad': 'Coquimbo'}
Para crear un diccionario vacío, se suele recomendar el uso de
{}
frente adict()
, no sólo por ser más pitónico sino por tener ( en promedio ) un mejor rendimiento en tiempos de ejecución.
Ahora que sabes cómo crear diccionarios en Python, es momento de ver las operaciones más comunes que puedes hacer con ellos.
Operaciones Comunes con Diccionarios
Trabajar con diccionarios de forma eficiente requiere conocer las operaciones básicas. A continuación, te muestro las operaciones más comunes y útiles:
---
title: "Diccionarios - Python"
---
graph LR
F["Operaciones Comunes"] --> F1["<code class="hl">my_dict.keys()</code>: Retorna todas las claves"]
F --> F2["<code class="hl">my_dict.values()</code>: Retorna todos los valores"]
F --> F3["<code class="hl">my_dict.items()</code>: Retorna pares clave-valor"]
F --> F4["<code class="hl">my_dict.clear()</code>: Elimina todos los elementos"]
F --> F5["<code class="hl">key in my_dict</code>: Verifica si una clave existe"]
F --> F6["<code class='hl'>my_dict.get(key, default)</code>: Retorna el valor de la clave o el por defecto si no existe"]
Acceder a valores
Para acceder a un valor basta con escribir la clave entre corchetes []
. Por ejemplo:
>>> mis_datos = {"nombre": "Marco", "edad": 32, "ciudad": "Coquimbo"}
>>> mis_datos["nombre"]
"Marco"
Cuidado con las claves inexistentes. Si intentamos acceder a una clave que no existe, obtendremos un error tipo
KeyError
>>> mis_datos["apodo"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'apodo'
Sin embargo, existe un método muy útil para manejar los posibles errores de accesos por claves inexistentes. Se trata de .get()
y su comportamiento es el siguiente:
- Si la clave que buscamos existe, nos retorna su valor.
- Si la clave que buscamos no existe, nos retorna
None
, salvo que indiquemos otro valor por defecto, pero en ninguno de los casos obtendremos un error.
>>> mis_datos.get("nombre")
"Marco"
>>> mis_datos.get("apodo", "No existe esta clave")
"No existe esta clave"
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 remplaza el valor existente por el nuevo.
- Si la clave es nueva, se añade al diccionario con su valor.
Partamos con el siguiente diccionario de ejemplo:
1
2
3
4
usuario = {
"nombre": "Marco",
"apodo": "El Marco Polo"
}
Si queremos añadir el país del usuario a nuestro diccionario, usamos entre corchetes el nombre para la nueva clave
y le asignamos el valor
:
1
usuario['pais'] = 'Chilito'
Por otro lado, si queremos modificar el valor, usamos el nombre de la clave existente y le asignamos el nuevo valor:
1
usuario['pais'] = 'Chile'
Obtener todas las claves de un diccionario
Mediante el método .keys()
de un diccionario podemos retornar un objeto de vista. La vista de objetos contiene las clave del diccionario en forma de lista:
>>> usuario.keys()
dict_keys(['nombre', 'apodo', 'pais'])
Este objeto
dict_keys
no es una lista como tal, pero puede convertirse fácilmente en una usandolist(usuarios.keys())
.
Ejemplo en Python interactivo para recorrer solo las claves:
>>> for clave in usuario.keys()
... print(clave)
...
nombre
apodo
pais
Obtener todos los valores de un diccionario
De igual forma, con el método .values()
podemos retornar un objeto de vista. La vista de objetos contiene los valores del diccionario en forma de lista:
>>> usuario.values()
dict_values(['Marco', 'El Marco Polo', 'Chile'])
Este objeto
dict_values
no es una lista como tal, pero puede convertirse fácilmente en una usandolist(usuarios.values())
.
Ejemplo en Python interactivo para recorrer solo los valores:
>>> for valor in usuario.values()
... print(clave)
...
Marco
El Marco Polo
Chile
Obtener todos los pares clave-valor de un diccionario
Mediante el método .items()
de un diccionario podemos retornar un objeto de vista. La vista de objetos contiene tuplas como elementos conpuestas por pares clave-valor del diccionario en forma de vista:
>>> usuario.items()
dict_items([('nombre', 'Marco'), ('apodo', 'El Marco Polo'), ('pais', 'Chile')])
Al igual que con
.keys()
y.values()
, el objetodict_items
no es una lista directamente, pero puede convertirse en una conlist(usuario.items())
.
Ejemplo en Python interactivo para recorrer claves y valores:
>>> for clave, valor in usuario.items()
... print(f"{clave}: {valor}")
...
nombre: Marco
apodo: El Marco Polo
pais: Chile
Borrar elementos
Python nos proporciona, al menos, tres formas de borrar elementos en un diccionario:
- Por su clave
- Mediante la sentencia
del
:
1
>>> del usuario['pais']
- Por su clave (con extracción)
- Mediante el método
pop()
podemos extraer un elemento del diccionario por su clave esto retornará el valor de la clave extraida:
1
2
>>> usuario.pop('pais')
'Chile'
- Borrado completo
- Mediante el método
clear()
podemos quitar todos los elementos de un diccionario:
1
2
3
>>> usuario.clear()
>>> usuario
{}
Los diccionarios en Python son estructuras de datos que almacenan pares de clave:valor
. Son ideales para almacenar información que requiere acceso rápido mediante una clave única, permitiendo manipular y organizar datos de manera eficiente.