W3docs

Iterar sobre Diccionarios

Aprende todas las formas de iterar sobre un diccionario en Python: claves, valores, items, bucles filtrados, comprensiones y modificaciones seguras con ejemplos.

Los diccionarios de Python almacenan datos como pares clave-valor, y con frecuencia necesitarás recorrerlos — para imprimir cada entrada, filtrar datos, transformar valores o construir nuevas estructuras. Este capítulo cubre todas las técnicas estándar para iterar sobre un diccionario, explica qué método usar en cada situación y destaca el error más común: modificar un diccionario mientras lo estás recorriendo.

Si eres nuevo en los diccionarios, lee primero Diccionarios de Python. Para la sintaxis general de bucles, consulta Bucles For en Python.

Iterar sobre las Claves

Cuando usas un bucle for básico sobre un diccionario, Python itera sobre sus claves de forma predeterminada.

Iterar sobre las claves de un diccionario

person = {"name": "Alice", "age": 30, "city": "Berlin"}

for key in person:
    print(key)

Salida:

name
age
city

Llamar a .keys() es equivalente y hace la intención más explícita:

python— editable, runs on the server

Una vez que tienes la clave, puedes buscar su valor dentro del bucle:

person = {"name": "Alice", "age": 30, "city": "Berlin"}

for key in person:
    print(key, "->", person[key])

Salida:

name -> Alice
age -> 30
city -> Berlin

Cuándo usar .keys()

Usa la forma básica for key in d cuando solo necesites las claves. Usa d.keys() explícitamente cuando quieras verificar pertenencia ("name" in d.keys()) o pasar la vista a otra función. Sin embargo, para una prueba de pertenencia simple, if "name" in d es más rápido.

Iterar sobre los Valores

Usa .values() cuando solo necesites los valores y no te importen las claves.

Iterar sobre los valores de un diccionario

scores = {"math": 92, "science": 87, "english": 95}

for score in scores.values():
    print(score)

Salida:

92
87
95

Un caso de uso común es calcular un resumen de todos los valores:

scores = {"math": 92, "science": 87, "english": 95}

total = sum(scores.values())
average = total / len(scores)
print(f"Average score: {average:.1f}")

Salida:

Average score: 91.3

Iterar sobre Pares Clave-Valor con .items()

.items() devuelve cada entrada como una tupla (key, value). Puedes desempaquetar la tupla directamente en dos variables. Este es el método de iteración más versátil y al que recurrirás con más frecuencia.

Iterar sobre pares clave-valor

person = {"name": "Alice", "age": 30, "city": "Berlin"}

for key, value in person.items():
    print(f"{key}: {value}")

Salida:

name: Alice
age: 30
city: Berlin

Filtrar Mientras se Itera

Combina un bucle for con una condición if para procesar solo las entradas que te interesan.

Imprimir solo los artículos en stock

inventory = {"apples": 5, "bananas": 0, "oranges": 3, "grapes": 0}

print("In stock:")
for item, qty in inventory.items():
    if qty > 0:
        print(f"  {item}: {qty}")

Salida:

In stock:
  apples: 5
  oranges: 3

Ordenar Entradas del Diccionario

Python 3.7+ garantiza que los diccionarios mantienen el orden de inserción. Si necesitas un orden diferente, ordena las claves o los elementos antes de iterar — el diccionario en sí no se ve afectado.

Ordenar por clave (alfabéticamente)

book = {"banana": 7, "apple": 3, "cherry": 12}

for fruit in sorted(book):
    print(f"{fruit}: {book[fruit]}")

Salida:

apple: 3
banana: 7
cherry: 12

Ordenar por valor

Pasa una función key a sorted() para controlar el criterio de ordenamiento.

book = {"banana": 7, "apple": 3, "cherry": 12}

for fruit, count in sorted(book.items(), key=lambda item: item[1], reverse=True):
    print(f"{fruit}: {count}")

Salida:

cherry: 12
banana: 7
apple: 3

Usar enumerate() al Iterar

Envuelve .items() en enumerate() para obtener un índice progresivo junto a cada par clave-valor.

colors = {"red": "#FF0000", "green": "#00FF00", "blue": "#0000FF"}

for index, (name, hex_code) in enumerate(colors.items()):
    print(f"{index}: {name} -> {hex_code}")

Salida:

0: red -> #FF0000
1: green -> #00FF00
2: blue -> #0000FF

Comprensiones de Diccionario

Una comprensión de diccionario construye un nuevo diccionario a partir de uno existente en una sola expresión. La sintaxis es similar a las comprensiones de lista, pero usa llaves y dos puntos entre la clave y el valor.

Aplicar un descuento del 10% a cada precio

prices = {"apple": 1.20, "banana": 0.50, "orange": 0.80}

discounted = {item: round(price * 0.9, 2) for item, price in prices.items()}
print(discounted)

Salida:

{'apple': 1.08, 'banana': 0.45, 'orange': 0.72}

Puedes agregar una condición de filtro al final:

Conservar solo los estudiantes que obtuvieron 90 o más

students = {
    "Alice": {"grade": "A", "score": 95},
    "Bob":   {"grade": "B", "score": 82},
    "Carol": {"grade": "A", "score": 91},
}

top_students = {name: info for name, info in students.items() if info["score"] >= 90}
print(top_students)

Salida:

{'Alice': {'grade': 'A', 'score': 95}, 'Carol': {'grade': 'A', 'score': 91}}

Iterar sobre Diccionarios Anidados

Cuando los valores son a su vez diccionarios (consulta Diccionarios Anidados), accede a las entradas internas con un segundo subíndice o un segundo bucle.

Imprimir todos los campos de cada estudiante

students = {
    "Alice": {"grade": "A", "score": 95},
    "Bob":   {"grade": "B", "score": 82},
    "Carol": {"grade": "A", "score": 91},
}

for name, info in students.items():
    print(f"{name}: grade={info['grade']}, score={info['score']}")

Salida:

Alice: grade=A, score=95
Bob: grade=B, score=82
Carol: grade=A, score=91

Modificar un Diccionario Mientras se Itera — el Error Más Común

No puedes agregar ni eliminar claves de un diccionario mientras lo estás iterando. Python lanza un RuntimeError de inmediato:

d = {"a": 1, "b": 2, "c": 3}

# This raises RuntimeError: dictionary changed size during iteration
for key in d:
    if d[key] == 2:
        del d[key]

El patrón seguro consiste en recopilar primero las claves que deseas eliminar y luego borrarlas después del bucle:

Eliminación segura después de iterar

config = {"debug": True, "verbose": True, "timeout": 30}

keys_to_remove = [k for k, v in config.items() if v is True]
for k in keys_to_remove:
    del config[k]

print(config)

Salida:

{'timeout': 30}

El mismo principio aplica para agregar claves: recopila los nuevos pares y luego actualiza el diccionario con update() o asignación directa después del bucle.

Elegir el Método Correcto

ObjetivoMétodo
Iterar solo sobre clavesfor key in d o for key in d.keys()
Iterar solo sobre valoresfor value in d.values()
Iterar sobre ambosfor key, value in d.items()
Construir un nuevo diccionarioComprensión de diccionario
Ordenar entradassorted(d) o sorted(d.items(), key=...)
Índice + clave-valorenumerate(d.items())

Para el conjunto completo de operaciones de diccionario, consulta Métodos de Diccionario en Python y Copiar Diccionarios.

Práctica

Práctica
Which of the following ways can be used to loop through a dictionary in Python, as learned from the webpage at W3docs?
Which of the following ways can be used to loop through a dictionary in Python, as learned from the webpage at W3docs?
Was this page helpful?