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
cityLlamar a .keys() es equivalente y hace la intención más explícita:
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 -> BerlinCuá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
95Un 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.3Iterar 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: BerlinFiltrar 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: 3Ordenar 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: 12Ordenar 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: 3Usar 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 -> #0000FFComprensiones 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=91Modificar 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
| Objetivo | Método |
|---|---|
| Iterar solo sobre claves | for key in d o for key in d.keys() |
| Iterar solo sobre valores | for value in d.values() |
| Iterar sobre ambos | for key, value in d.items() |
| Construir un nuevo diccionario | Comprensión de diccionario |
| Ordenar entradas | sorted(d) o sorted(d.items(), key=...) |
| Índice + clave-valor | enumerate(d.items()) |
Para el conjunto completo de operaciones de diccionario, consulta Métodos de Diccionario en Python y Copiar Diccionarios.