Aprende Python · lección gratuita
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.
dict con las mismas claves (campos).for fila in datos: y accedes a campos con fila["clave"].[r for r in datos if r["edad"] > 18].sorted(datos, key=...) usando una función lambda.sum(r["precio"] for r in datos).sum(1 for r in datos if ...).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.
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)
💡 Usasorted()para no destruir tus datos. Devuelve una lista nueva y deja el original intacto; reservalista.sort()para cuando realmente quieras modificar la lista en su sitio.
| Tarea | Sintaxis |
|---|---|
| Acceder a un campo | registro["clave"] |
| Recorrer registros | for 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 campo | sum(r["x"] for r in datos) |
| Contar con condición | sum(1 for r in datos if r["x"] > 0) |
| Promedio | sum(r["x"] for r in datos) / len(datos) |
| Máximo registro | max(datos, key=lambda r: r["x"]) |
---