Aprende Python · lección gratuita

Lección 31 · Trabajar con datos: listas de diccionarios

Resumen

Una lista de diccionarios es la forma más común de representar datos tabulares en Python: cada diccionario es un registro (una fila) y sus claves son los campos (las columnas). Es el patrón que vas a encontrar al leer un CSV, una respuesta JSON de una API o los resultados de una consulta a base de datos. En esta lección aprenderás a recorrer, filtrar, ordenar y agregar estos registros.

Conceptos

Un registro es simplemente un diccionario donde cada clave describe un dato. Cuando juntas varios registros en una lista, obtienes una tabla. La gran ventaja es que puedes recorrerla con un for y trabajar campo por campo de forma muy legible:

empleados = [
    {"nombre": "Ana",   "area": "Ventas",  "sueldo": 3200},
    {"nombre": "Luis",  "area": "TI",      "sueldo": 4100},
    {"nombre": "Marta", "area": "Ventas",  "sueldo": 3800},
]

for e in empleados:
    print(e["nombre"], "-", e["area"])

Para filtrar usas una comprensión de lista con una condición sobre los campos. Para ordenar usas sorted() con el parámetro key, al que le pasas una función lambda que devuelve el valor por el cual ordenar. sorted() devuelve una lista nueva y no toca la original (a diferencia de lista.sort()). Si quieres orden descendente, añade reverse=True:

# Filtrar solo el área de Ventas
ventas = [e for e in empleados if e["area"] == "Ventas"]

# Ordenar por sueldo de mayor a menor (lista nueva)
por_sueldo = sorted(empleados, key=lambda e: e["sueldo"], reverse=True)

Para agregar (sumar, promediar, contar) combinas funciones como sum(), len(), max() o min() con un generador que extrae el campo deseado. Por ejemplo, sum(e["sueldo"] for e in empleados) suma todos los sueldos, y dividirlo entre len(empleados) te da el promedio.

Ejemplos

productos = [
    {"nombre": "Café",   "precio": 12, "stock": 5},
    {"nombre": "Té",     "precio": 8,  "stock": 0},
    {"nombre": "Azúcar", "precio": 6,  "stock": 9},
]

# 1) Recorrer e imprimir una tabla simple
for p in productos:
    print(f"{p['nombre']}: S/{p['precio']}")

# 2) Filtrar los que tienen stock disponible
disponibles = [p for p in productos if p["stock"] > 0]
print("Disponibles:", len(disponibles))

# 3) Ordenar por precio ascendente
for p in sorted(productos, key=lambda x: x["precio"]):
    print(p["nombre"], p["precio"])

# 4) Sumar el valor total del inventario (precio * stock)
total = sum(p["precio"] * p["stock"] for p in productos)
print("Total inventario:", total)
💡 Usa sorted() para no destruir tus datos. Devuelve una lista nueva y deja el original intacto; reserva lista.sort() para cuando realmente quieras modificar la lista en su sitio.

Cheatsheet

TareaSintaxis
Acceder a un camporegistro["clave"]
Recorrer registrosfor r in datos:
Filtrar[r for r in datos if r["x"] > 0]
Ordenar (asc)sorted(datos, key=lambda r: r["x"])
Ordenar (desc)sorted(datos, key=lambda r: r["x"], reverse=True)
Sumar un camposum(r["x"] for r in datos)
Contar con condiciónsum(1 for r in datos if r["x"] > 0)
Promediosum(r["x"] for r in datos) / len(datos)
Máximo registromax(datos, key=lambda r: r["x"])

---

← Algoritmos clásicosMini-proyecto integrador →

Ver todas las lecciones de Aprende Python →