Saltar al contenido
Editor

Diccionarios en Python: guía completa con ejemplos reales

Principiante30 min8 ejercicios110 XP

Esta lección es una traducción del original en inglés.Read in EnglishAvisar de un error de traducción

0/8 ejercicios

Abre la aplicación de contactos de tu teléfono. Buscas a una persona por su nombre y obtienes su número de teléfono. No buscas por posición: no dices "dame el contacto número 47". Buscas por nombre.

Un diccionario de Python funciona exactamente así. En lugar de guardar los elementos por posición (como una lista), un diccionario los guarda como pares clave-valor. La clave es el nombre que buscas, y el valor es lo que obtienes.

Los diccionarios están por todas partes en la programación real. Perfiles de usuario, ajustes de configuración, datos JSON que llegan de una API, contadores de palabras: todos usan diccionarios. En esta lección dominarás todas las operaciones esenciales con diccionarios.

Cómo crear un diccionario en Python

Un diccionario se crea con llaves {} y pares clave-valor, con dos puntos entre la clave y el valor. Los pares se separan con comas.

Crear un diccionario
# A simple dictionary
contact = {
'name': 'Alice',
'phone': '555-1234',
'email': 'alice@example.com',
}
print(contact)
Salida
{'name': 'Alice', 'phone': '555-1234', 'email': 'alice@example.com'}

Las claves suelen ser cadenas de texto, pero pueden ser de cualquier tipo inmutable: números, tuplas o booleanos. Los valores pueden ser cualquier cosa: cadenas, números, listas e incluso otros diccionarios.

Valores de distintos tipos y diccionarios vacíos
# Different types of keys and values
student = {
'name': 'Bob',
'age': 16,
'grades': [85, 92, 78],
'active': True,
}
print(student)
# Empty dictionary - two ways
empty1 = {}
empty2 = dict()
print(empty1) # {}
print(empty2) # {}
Salida
{'name': 'Bob', 'age': 16, 'grades': [85, 92, 78], 'active': True}
{}
{}

Acceder a los valores de un diccionario y modificarlos

Para obtener un valor de un diccionario, pon la clave entre corchetes. Para cambiar un valor, asígnale uno nuevo a esa clave. Para añadir un par nuevo, asigna un valor a una clave que todavía no exista.

Acceder, modificar y añadir valores
person = {'name': 'Alice', 'age': 25, 'city': 'Boston'}
# Access a value by key
print(person['name']) # Alice
print(person['age']) # 25
# Change an existing value
person['age'] = 26
print(person['age']) # 26
# Add a new key-value pair
person['job'] = 'Engineer'
print(person)
Salida
Alice
25
26
{'name': 'Alice', 'age': 26, 'city': 'Boston', 'job': 'Engineer'}
Acceso seguro con get()
person = {'name': 'Alice', 'age': 25}
# This would crash:
# print(person['salary']) # KeyError!
# Safe way: use .get() with a default value
print(person.get('salary', 'Not specified')) # Not specified
print(person.get('name', 'Unknown')) # Alice
Salida
Not specified
Alice
Inseguro: los corchetes fallan si falta la clave
data = {'x': 10}
# Crashes with KeyError:
value = data['y']
Seguro: get() devuelve un valor predeterminado
data = {'x': 10}
# Returns 0 if 'y' is missing:
value = data.get('y', 0)

Métodos esenciales de los diccionarios

Los diccionarios traen varios métodos integrados que facilitan el trabajo con ellos. Estos son los que más usarás.

keys(), values() e items()
fruit_prices = {'apple': 1.50, 'banana': 0.75, 'cherry': 3.00}
# keys() - get all keys
print(list(fruit_prices.keys())) # ['apple', 'banana', 'cherry']
# values() - get all values
print(list(fruit_prices.values())) # [1.5, 0.75, 3.0]
# items() - get all key-value pairs as tuples
print(list(fruit_prices.items())) # [('apple', 1.5), ('banana', 0.75), ('cherry', 3.0)]
Salida
['apple', 'banana', 'cherry']
[1.5, 0.75, 3.0]
[('apple', 1.5), ('banana', 0.75), ('cherry', 3.0)]
pop() y update()
inventory = {'apples': 5, 'bananas': 3, 'oranges': 8}
# pop() - remove a key and return its value
removed = inventory.pop('bananas')
print(removed) # 3
print(inventory) # {'apples': 5, 'oranges': 8}
# update() - merge another dictionary into this one
inventory.update({'grapes': 12, 'apples': 10})
print(inventory) # {'apples': 10, 'oranges': 8, 'grapes': 12}
Salida
3
{'apples': 5, 'oranges': 8}
{'apples': 10, 'oranges': 8, 'grapes': 12}

Fíjate en que update() añade claves nuevas y también sobrescribe las existentes. En el ejemplo anterior, 'apples' pasó de 5 a 10, y 'grapes' se añadió como clave nueva.

Recorrer diccionarios

Puedes recorrer las claves de un diccionario, sus valores o ambos. Lo más habitual es recorrer items(), porque así obtienes la clave y el valor a la vez.

Tres formas de recorrer un diccionario
scores = {'Alice': 95, 'Bob': 87, 'Charlie': 72}
# Loop through keys (default)
for name in scores:
print(name)
print('---')
# Loop through values
for score in scores.values():
print(score)
print('---')
# Loop through both (most useful)
for name, score in scores.items():
print(f'{name}: {score}')
Salida
Alice
Bob
Charlie
---
95
87
72
---
Alice: 95
Bob: 87
Charlie: 72

Comprobar si existe una clave

Antes de acceder a una clave, a menudo conviene comprobar primero si existe. La palabra clave in busca entre las claves, no entre los valores.

Usar in para comprobar claves
user = {'name': 'Alice', 'email': 'alice@example.com'}
# Check if a key exists
print('name' in user) # True
print('phone' in user) # False
print('phone' not in user) # True
# Common pattern: check before accessing
if 'email' in user:
print(f'Email: {user["email"]}')
else:
print('No email on file')
Salida
True
False
True
Email: alice@example.com

Diccionarios anidados

El valor de un diccionario puede ser otro diccionario. Esto se llama anidamiento y te permite representar datos complejos y estructurados, como los estudiantes de un aula, cada uno con sus propios atributos.

Diccionarios anidados
classroom = {
'Alice': {'age': 16, 'grade': 'A'},
'Bob': {'age': 15, 'grade': 'B'},
'Charlie': {'age': 16, 'grade': 'A'},
}
# Access a nested value with chained brackets
print(classroom['Alice']['grade']) # A
print(classroom['Bob']['age']) # 15
# Loop through nested data
for name, info in classroom.items():
print(f'{name} is {info["age"]} and got a {info["grade"]}')
Salida
A
15
Alice is 16 and got a A
Bob is 15 and got a B
Charlie is 16 and got a A

Para acceder a un valor anidado, encadenas corchetes: primero la clave exterior y luego la interior. Puedes anidar tantos niveles como quieras, pero a partir de dos o tres niveles el código cuesta leerlo.

Errores comunes con los diccionarios

Tuplas como claves de diccionario
# This works - tuples are immutable
locations = {
(40.71, -74.00): 'New York',
(51.50, -0.12): 'London',
}
print(locations[(40.71, -74.00)]) # New York
# This would crash:
# bad = {[1, 2]: 'nope'} # TypeError: unhashable type: 'list'
Salida
New York
Falla: modificar durante el bucle
data = {'a': 1, 'b': 2, 'c': 3}
for key in data:
    if data[key] < 2:
        del data[key]  # RuntimeError!
Funciona: recorrer una copia de las claves
data = {'a': 1, 'b': 2, 'c': 3}
for key in list(data.keys()):
    if data[key] < 2:
        del data[key]  # Safe!
print(data)  # {'b': 2, 'c': 3}

Ejercicios de práctica

¡Hora de practicar! Estos ejercicios avanzan desde las operaciones básicas con diccionarios hasta patrones más complejos.

Ejercicio 1: crea un diccionario y accede a un valor
Escribe el código

Crea un diccionario llamado pet con estos pares clave-valor:

  • 'name': 'Buddy'
  • 'species': 'dog'
  • 'age': 5
  • Luego imprime el nombre de la mascota.

    Salida esperada:

    Buddy
    # Create the pet dictionary
    # Print the pet's name
    Ejercicio 2: añade y modifica entradas de un diccionario
    Escribe el código

    Tienes un diccionario que representa un libro. Sigue estos pasos en orden:

    1. Cambia 'year' a 2024

    2. Añade una clave nueva 'genre' con el valor 'fiction'

    3. Imprime el diccionario completo

    Salida esperada:

    {'title': 'The Great Adventure', 'author': 'Jane Smith', 'year': 2024, 'genre': 'fiction'}
    book = {'title': 'The Great Adventure', 'author': 'Jane Smith', 'year': 2020}
    # Step 1: Change the year to 2024
    # Step 2: Add genre
    # Step 3: Print the dictionary
    Ejercicio 3: acceso seguro con get()
    Escribe el código

    Tienes un diccionario con el perfil de un usuario. Usa el método .get() para imprimir sin riesgo su número de teléfono. Si la clave 'phone' no existe, imprime 'No phone number'.

    Salida esperada:

    No phone number
    profile = {'name': 'Alice', 'email': 'alice@mail.com'}
    # Use .get() to safely access the phone key
    Ejercicio 4: recorre un diccionario
    Escribe el código

    Recorre el diccionario e imprime cada fruta y su precio con este formato:

    apple: $1.50
    banana: $0.75
    cherry: $3.00

    Asegúrate de que los precios muestren exactamente dos decimales.

    prices = {'apple': 1.5, 'banana': 0.75, 'cherry': 3.0}
    # Loop and print each item
    Ejercicio 5: predice la salida (claves duplicadas)
    Predice la salida

    Lee este código con atención y predice qué imprimirá. ¿Qué pasa cuando un diccionario tiene claves duplicadas?

    Escribe la salida exacta.

    data = {'a': 1, 'b': 2, 'a': 3}
    print(data)
    print(len(data))
    Ejercicio 6: corrige el error al buscar un valor
    Corrige el error

    Este código intenta comprobar si la nota 'A' existe en el diccionario, pero está comprobando lo que no debe. Corrígelo para que imprima:

    Someone got an A!
    grades = {'Alice': 'A', 'Bob': 'B', 'Charlie': 'C'}
    if 'A' in grades:
    print('Someone got an A!')
    else:
    print('No one got an A.')
    Ejercicio 7: crea un contador de palabras
    Escribe el código

    Cuenta cuántas veces aparece cada palabra en la lista dada. Guarda los conteos en un diccionario llamado word_counts y luego imprímelo.

    Salida esperada:

    {'hello': 3, 'world': 2, 'python': 1}
    words = ['hello', 'world', 'hello', 'python', 'hello', 'world']
    # Build a word count dictionary
    # Print the result
    Ejercicio 8: accede a los datos de un diccionario anidado
    Escribe el código

    Tienes un diccionario anidado de estudiantes. Recórrelo e imprime el nombre de cada estudiante y su nota de matemáticas con este formato:

    Alice: 95
    Bob: 82
    Charlie: 91
    students = {
    'Alice': {'math': 95, 'english': 88},
    'Bob': {'math': 82, 'english': 90},
    'Charlie': {'math': 91, 'english': 85},
    }
    # Loop and print each student's math score

    Resumen: lo que aprendiste sobre los diccionarios en Python

    ¡Buen trabajo! Este es un repaso de todo lo que ya sabes:

    ConceptoQué haceEjemplo
    Crear un diccionarioGuarda pares clave-valord = {'name': 'Alice'}
    Acceder por claveObtiene un valord['name']
    Acceso seguroDa un valor predeterminado si faltad.get('x', 0)
    Añadir / modificarAsigna un valord['age'] = 25
    keys()Todas las clavesd.keys()
    values()Todos los valoresd.values()
    items()Tuplas clave-valord.items()
    pop(key)Elimina y devuelved.pop('age')
    update()Combina diccionariosd.update(other)
    inComprueba si existe una clave'name' in d
    AnidamientoDiccionarios dentro de diccionariosd['a']['b']

    Los diccionarios son una de las estructuras de datos más importantes de Python. Datos JSON, respuestas de una API, archivos de configuración, contadores: todo gira en torno a pares clave-valor.

    ¿Qué sigue?

    En la siguiente lección, [comprensiones en Python](/python/python-comprehensions), aprenderás a crear listas, diccionarios y conjuntos en una sola línea de código elegante.

    Las comprensiones te permiten cambiar bucles de varias líneas por una sola línea concisa. Son una de las características que hacen de Python un lenguaje tan limpio y expresivo.

    Tutoriales relacionados

    ¿Te sirvió este tutorial?

    Sugerir una mejora