Diccionarios de Python

PythonBeginner
Practicar Ahora

Introducción

En Python, un diccionario es una colección ordenada (desde Python 3.7) de pares clave: valor. Los diccionarios se utilizan para almacenar valores de datos de una manera que es mutable, indexada y no permite claves duplicadas. Las operaciones principales en un diccionario son almacenar un valor con una clave y extraer el valor dada la clave.

Por ejemplo, puedes crear un diccionario para almacenar información sobre un gato:

## Dictionary: collection of key-value pairs
my_cat = {
    'size': 'fat',          ## key: 'size', value: 'fat'
    'color': 'gray',        ## key: 'color', value: 'gray'
    'disposition': 'loud'   ## key: 'disposition', value: 'loud'
}

En este laboratorio, aprenderás a crear diccionarios, acceder y modificar sus datos, iterar sobre ellos y utilizar varios métodos de utilidad para trabajar con ellos de manera efectiva.

Acceso y Modificación de Datos del Diccionario

En este paso, aprenderás cómo crear un diccionario, añadir nuevos pares clave-valor, actualizar los existentes y recuperar valores usando el operador de subíndice [].

Puedes añadir o actualizar una entrada de diccionario asignando un valor a una clave usando el operador []. Si la clave ya existe, su valor se actualiza. Si la clave no existe, se añade un nuevo par clave-valor.

Nota: Si no estás familiarizado con el uso de WebIDE (similar a VS Code), por favor, apréndelo primero en este laboratorio.

Empecemos creando un archivo para escribir nuestro código.

Primero, abre el archivo main.py ubicado en el directorio ~/project desde el explorador de archivos de la izquierda.

Ahora, añade el siguiente código a main.py. Este código define un diccionario y luego le añade un nuevo par clave-valor.

## Add or update dictionary entry using subscript operator
my_cat = {
 'size': 'fat',
 'color': 'gray',
 'disposition': 'loud',
}
my_cat['age_years'] = 2  ## Add new key-value pair
print(my_cat)

Para ejecutar el script, abre una terminal y ejecuta el siguiente comando:

python3 main.py

Deberías ver el diccionario actualizado impreso en la consola:

{'size': 'fat', 'color': 'gray', 'disposition': 'loud', 'age_years': 2}

También puedes recuperar un valor usando la clave dentro del operador de subíndice []. Modifiquemos el archivo main.py para acceder e imprimir el valor asociado con la clave 'size'.

Reemplaza el contenido de main.py con el siguiente código:

my_cat = {
 'size': 'fat',
 'color': 'gray',
 'disposition': 'loud',
}
print(my_cat['size'])

Ejecuta el script de nuevo:

python3 main.py

La salida será el valor de la clave 'size':

fat

Ten en cuenta que si intentas acceder a una clave que no está en el diccionario, Python lanzará un KeyError. Veamos esto en acción. Reemplaza el código en main.py con esto:

my_cat = {
 'size': 'fat',
 'color': 'gray',
 'disposition': 'loud',
}
print(my_cat['eye_color'])

Ejecuta el script:

python3 main.py

Esto resultará en un KeyError porque la clave 'eye_color' no existe en el diccionario my_cat.

Traceback (most recent call last):
  File "/home/labex/project/main.py", line 5, in <module>
    print(my_cat['eye_color'])
KeyError: 'eye_color'

Para la verificación, por favor revierte main.py al primer ejemplo que añade una nueva clave e imprime el diccionario completo.

## Add or update dictionary entry using subscript operator
my_cat = {
 'size': 'fat',
 'color': 'gray',
 'disposition': 'loud',
}
my_cat['age_years'] = 2  ## Add new key-value pair
print(my_cat)

Iteración sobre Diccionarios

En este paso, explorarás diferentes maneras de recorrer un diccionario. Python proporciona varios métodos para iterar sobre las claves, los valores o ambos de un diccionario.

Iteración sobre Valores con values()

El método values() devuelve un objeto de vista que muestra una lista de todos los valores en el diccionario. Puedes recorrer este objeto para acceder a cada valor.

Borra el archivo main.py y añade el siguiente código:

## Iterate over dictionary values using .values() method
pet = {'color': 'red', 'age': 42}
for value in pet.values():  ## Loop through all values
    print(value)

Ejecuta el script:

python3 main.py

La salida mostrará cada valor en una nueva línea:

red
42

Iteración sobre Claves con keys()

De manera similar, el método keys() devuelve un objeto de vista que contiene las claves del diccionario. Aunque puedes usar pet.keys(), iterar directamente sobre el diccionario en sí es la forma más común y "Pythonica" de recorrer sus claves.

Actualiza main.py con el siguiente código:

## Iterating over dictionary directly loops through keys (default behavior)
pet = {'color': 'red', 'age': 42}
for key in pet:  ## Equivalent to for key in pet.keys()
    print(key)

Ejecuta el script:

python3 main.py

Verás las claves impresas:

color
age

Iteración sobre Pares Clave-Valor con items()

El método items() es muy útil cuando necesitas tanto la clave como el valor durante la iteración. Devuelve un objeto de vista donde cada elemento es una tupla (clave, valor).

Actualiza main.py para usar items():

## Iterate over key-value pairs using .items() method
pet = {'color': 'red', 'age': 42}
for key, value in pet.items():  ## Unpack tuple into key and value
    print(f'Key: {key} Value: {value}')

Aquí, estamos utilizando el desempaquetado de tuplas (for key, value in ...) para asignar el primer elemento de la tupla a key y el segundo a value en cada iteración.

Ejecuta el script:

python3 main.py

La salida serán cadenas de texto formateadas mostrando cada par clave-valor:

Key: color Value: red
Key: age Value: 42

Acceso Seguro y Adición de Elementos

En este paso, aprenderás cómo recuperar valores de forma segura sin provocar un KeyError y cómo añadir elementos condicionalmente.

Acceso Seguro con get()

Como viste en el Paso 1, intentar acceder a una clave inexistente con [] lanza un KeyError. El método get() proporciona una forma más segura de acceder a las claves. Devuelve el valor de una clave si existe, pero si no existe, devuelve None en lugar de lanzar un error.

Borra main.py y añade el siguiente código:

## .get() method: safely retrieve value, returns None if key doesn't exist
wife = {'name': 'Rose', 'age': 33}

print(f'My wife name is {wife.get("name")}')
print(f'She is deeply in love with {wife.get("husband")}')

Ejecuta el script:

python3 main.py

La salida muestra que get() devolvió el valor para 'name' y None para la clave faltante 'husband':

My wife name is Rose
She is deeply in love with None

También puedes proporcionar un valor por defecto a get() como segundo argumento. Este valor se devolverá si no se encuentra la clave.

Modifica main.py para proporcionar un valor por defecto:

wife = {'name': 'Rose', 'age': 33}

print(f'She is deeply in love with {wife.get("husband", "lover")}')

Ejecútalo de nuevo:

python3 main.py

Ahora la salida utiliza tu valor por defecto personalizado:

She is deeply in love with lover

Adición Condicional con setdefault()

El método setdefault() ofrece una forma concisa de añadir un par clave-valor solo si la clave no existe ya. Comprueba la existencia de la clave; si está presente, devuelve el valor de la clave. Si no lo está, inserta la clave con el valor especificado y devuelve ese valor.

Actualiza main.py para usar setdefault():

wife = {'name': 'Rose', 'age': 33}
wife.setdefault('has_hair', True) ## 'has_hair' no existe, por lo que se añade.
wife.setdefault('name', 'Lily') ## 'name' existe, por lo que el diccionario no se modifica.
print(wife)

Ejecuta el script:

python3 main.py

La salida muestra que se añadió 'has_hair', pero el valor de 'name' no se actualizó:

{'name': 'Rose', 'age': 33, 'has_hair': True}

Eliminar Elementos de un Diccionario

En este paso, practicarás varios métodos para eliminar elementos de un diccionario.

Eliminación con pop()

El método pop() elimina un elemento con la clave especificada y devuelve su valor. Si la clave no se encuentra, lanza un KeyError a menos que se proporcione un valor por defecto.

Borra main.py y añade el siguiente código para ver pop() en acción:

wife = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
removed_value = wife.pop('age')
print(f"Removed value: {removed_value}")
print(wife)

Ejecuta el script:

python3 main.py

La salida muestra el valor eliminado y el diccionario después de la eliminación:

Removed value: 33
{'name': 'Rose', 'hair': 'brown'}

Eliminación con popitem()

El método popitem() elimina el último elemento insertado en un diccionario (en Python 3.7+). Devuelve el elemento eliminado como una tupla (clave, valor).

Modifica main.py para usar popitem():

wife = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
removed_item = wife.popitem()
print(f"Removed item: {removed_item}")
print(wife)

Ejecuta el script:

python3 main.py

El último elemento, ('hair', 'brown'), es eliminado e impreso:

Removed item: ('hair', 'brown')
{'name': 'Rose', 'age': 33}

Eliminación con la Palabra Clave del

La palabra clave del se puede usar para eliminar un elemento por su clave. No devuelve el valor del elemento eliminado.

Modifica main.py para usar del:

wife = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
del wife['age']
print(wife)

Ejecuta el script:

python3 main.py

El diccionario se imprime sin la clave 'age':

{'name': 'Rose', 'hair': 'brown'}

Eliminación de Todos los Elementos con clear()

El método clear() elimina todos los elementos de un diccionario, dejándolo vacío.

Modifica main.py para usar clear():

wife = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
wife.clear()
print(wife)

Ejecuta el script:

python3 main.py

La salida es un diccionario vacío:

{}

Para la verificación, asegúrate de que tu main.py use pop() para eliminar la clave 'age' e imprima el diccionario final.

wife = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
wife.pop('age')
print(wife)

Operaciones de Utilidad de Diccionarios

En este paso, descubrirás algunas utilidades útiles para diccionarios, incluyendo la comprobación de la existencia de claves y valores, la impresión formateada (pretty-printing) y la fusión de diccionarios.

Comprobación de Claves y Valores con in

Puedes usar el operador in para verificar si una clave existe en un diccionario.

Borra main.py y añade este código:

person = {'name': 'Rose', 'age': 33}

print(f"'name' in person: {'name' in person}")
print(f"'height' in person: {'height' in person}")

Ejecuta el script:

python3 main.py

La salida muestra True para una clave existente y False para una inexistente:

'name' in person: True
'height' in person: False

También puedes usar in con el método values() para comprobar si un valor existe en el diccionario.

Modifica main.py:

person = {'name': 'Rose', 'age': 33}

print(f"'Rose' in person.values(): {'Rose' in person.values()}")
print(f"33 in person.values(): {33 in person.values()}")
print(f"'John' in person.values(): {'John' in person.values()}")

Ejecútalo:

python3 main.py

Salida:

'Rose' in person.values(): True
33 in person.values(): True
'John' in person.values(): False

Impresión Formateada con pprint

Cuando los diccionarios son grandes, imprimirlos directamente puede resultar en una línea larga y difícil de leer. El módulo pprint proporciona una capacidad de "impresión bonita" (pretty-print) para formatearlos de una manera más legible.

Actualiza main.py:

import pprint

wife = {'name': 'Rose', 'age': 33, 'has_hair': True, 'hair_color': 'brown', 'height': 1.6, 'eye_color': 'brown'}
pprint.pprint(wife)

Ejecuta el script:

python3 main.py

La salida está perfectamente formateada, con las claves ordenadas alfabéticamente:

{'age': 33,
 'eye_color': 'brown',
 'hair_color': 'brown',
 'has_hair': True,
 'height': 1.6,
 'name': 'Rose'}

Fusión de Diccionarios

Puedes fusionar dos diccionarios usando el operador de desempaquetado de diccionarios ** (disponible en Python 3.5+). Si hay claves superpuestas, se utilizará el valor del segundo diccionario.

Actualiza main.py con el siguiente código:

dict_a = {'a': 1, 'b': 2}
dict_b = {'b': 3, 'c': 4}
dict_c = {**dict_a, **dict_b}
print(dict_c)

Ejecuta el script:

python3 main.py

La salida es un nuevo diccionario que contiene todos los elementos de ambos. Observa que el valor para la clave 'b' es 3, que proviene de dict_b.

{'a': 1, 'b': 3, 'c': 4}

Resumen

¡Felicidades por completar este laboratorio sobre diccionarios de Python!

En este laboratorio, has aprendido las operaciones fundamentales para trabajar con una de las estructuras de datos más potentes de Python. Cubriste:

  • Creación, Acceso y Modificación: Usando {} para crear diccionarios y el operador de subíndice [] para añadir, actualizar y recuperar datos.
  • Iteración: Recorriendo claves, valores y pares clave-valor usando los métodos keys(), values() e items().
  • Operaciones Seguras: Usando get() para evitar KeyError y setdefault() para añadir elementos condicionalmente.
  • Eliminación de Elementos: Usando pop(), popitem(), la palabra clave del y clear() para eliminar elementos.
  • Operaciones de Utilidad: Comprobando la pertenencia con el operador in, formateando la salida con pprint y fusionando diccionarios con el operador de desempaquetado **.

Dominar los diccionarios es un paso crucial para convertirte en un programador de Python competente. Sigue practicando estos conceptos para construir aplicaciones más complejas y eficientes.