Lección 6 de 12 · Nivel 2: Intermedio
Listas, tuplas, diccionarios y sets en Python
En esta lección
- Trabajar con listas y sus métodos.
- Usar tuplas y desempaquetado.
- Guardar datos con nombre en diccionarios.
- Elegir la estructura correcta, incluidos los sets.
Hasta ahora cada variable guardaba un solo dato. En la vida real trabajas con colecciones: la lista de clientes, los productos de un pedido, las notas de un curso. Python tiene cuatro estructuras de datos integradas para eso: listas, tuplas, diccionarios y conjuntos. Elegir la correcta hace tu código más simple y más rápido.
Listas: colecciones ordenadas y modificables
productos = ["teclado", "mouse", "monitor"]
precios = [25.0, 12.5, 180.0]
mezcla = ["Ana", 29, True] # pueden mezclar tipos, aunque no es lo habitual
vacia = []
Acceder y modificar
print(productos[0]) # teclado
print(productos[-1]) # monitor
print(productos[0:2]) # ['teclado', 'mouse']
productos[1] = "mouse inalámbrico"
print(len(productos)) # 3
print("monitor" in productos) # True
Métodos más usados
| Método | Qué hace |
|---|---|
lista.append(x) | Añade x al final |
lista.insert(i, x) | Inserta x en la posición i |
lista.remove(x) | Elimina la primera aparición de x |
lista.pop() / lista.pop(i) | Quita y devuelve el último / el de la posición i |
lista.sort() | Ordena la lista (la modifica) |
sorted(lista) | Devuelve una copia ordenada (no modifica la original) |
lista.reverse() | Invierte el orden |
lista.count(x) / lista.index(x) | Cuántas veces aparece x / en qué posición está |
notas = [78, 92, 65, 88]
notas.append(95)
notas.sort(reverse=True)
print(notas) # [95, 92, 88, 78, 65]
print(sum(notas) / len(notas)) # 83.6
b = a no crea una copia: a y b son la misma lista con dos nombres, y cambiar una cambia la otra. Para copiar usa b = a.copy() o b = list(a).
1. Con frutas = ["pera", "uva"], ¿cómo queda la lista después de frutas.append("kiwi")?
append añade el elemento al final. Las listas son modificables; las tuplas no.
Tuplas: listas que no cambian
Una tupla es como una lista, pero inmutable: una vez creada, no se puede modificar. Se escribe con paréntesis:
coordenadas = (-12.0464, -77.0428)
fecha = (2026, 10, 31)
latitud, longitud = coordenadas # desempaquetado
print(latitud)
Se usan para datos que van juntos y no deben cambiar (coordenadas, fechas, registros fijos), y como claves de diccionario. Tenemos una guía completa sobre qué es una tupla en Python.
Diccionarios: datos con nombre
Un diccionario guarda pares clave: valor. En lugar de acceder por posición, accedes por nombre. Es la estructura más útil para representar "cosas" del mundo real:
cliente = {
"nombre": "Ana Ruiz",
"email": "ana@mail.com",
"ciudad": "Quito",
"compras": 12,
}
print(cliente["nombre"]) # Ana Ruiz
cliente["compras"] += 1 # modificar
cliente["telefono"] = "0991234567" # añadir clave nueva
del cliente["ciudad"] # eliminar
Acceso seguro con get()
print(cliente["direccion"]) # KeyError: la clave no existe
print(cliente.get("direccion")) # None
print(cliente.get("direccion", "—")) # — (valor por defecto)
Recorrer un diccionario
stock = {"teclado": 15, "mouse": 40, "monitor": 3}
for producto, cantidad in stock.items():
alerta = " ⚠ reponer" if cantidad < 5 else ""
print(f"{producto:10} {cantidad:3}{alerta}")
También existen .keys() (solo claves) y .values() (solo valores): sum(stock.values()) te da el total de unidades.
Contar con un diccionario
Un uso clásico: contar cuántas veces aparece cada elemento.
ventas = ["mouse", "teclado", "mouse", "monitor", "mouse"]
conteo = {}
for producto in ventas:
conteo[producto] = conteo.get(producto, 0) + 1
print(conteo) # {'mouse': 3, 'teclado': 1, 'monitor': 1}
2. Con precios = {"café": 12}, ¿qué devuelve precios.get("té", 0)?
.get() devuelve el valor por defecto cuando la clave no existe; precios["té"] daría KeyError.
Listas de diccionarios: tu primera "base de datos"
Combinando ambas estructuras puedes representar una tabla, como una hoja de Excel: cada diccionario es una fila y cada clave una columna.
pedidos = [
{"id": 1, "cliente": "Ana", "total": 120.0, "pagado": True},
{"id": 2, "cliente": "Luis", "total": 85.5, "pagado": False},
{"id": 3, "cliente": "Ana", "total": 240.0, "pagado": True},
]
pendientes = [p for p in pedidos if not p["pagado"]]
total_ana = sum(p["total"] for p in pedidos if p["cliente"] == "Ana")
mayor = max(pedidos, key=lambda p: p["total"])
print(len(pendientes)) # 1
print(total_ana) # 360.0
print(mayor["id"]) # 3
Así es, en esencia, cómo llegan los datos de una API o de un archivo JSON. El parámetro key=lambda p: p["total"] le dice a max() (y también a sorted()) qué campo usar para comparar.
Conjuntos (set): elementos únicos
correos = ["a@x.com", "b@x.com", "a@x.com"]
unicos = set(correos)
print(len(unicos)) # 2
grupo_a = {"Ana", "Luis", "Eva"}
grupo_b = {"Eva", "Pedro"}
print(grupo_a & grupo_b) # {'Eva'} (intersección)
print(grupo_a | grupo_b) # los 4 nombres (unión)
print(grupo_a - grupo_b) # {'Ana', 'Luis'} (diferencia)
Los conjuntos no tienen orden ni duplicados. Son ideales para eliminar repetidos y para comprobar pertenencia muy rápido.
3. ¿Qué devuelve len(set([1, 2, 2, 3, 3, 3]))?
Un set guarda solo elementos únicos: {1, 2, 3}.
¿Cuál uso?
| Necesitas… | Usa |
|---|---|
| Una secuencia ordenada que vas a modificar | Lista [] |
| Un grupo fijo de valores que no debe cambiar | Tupla () |
| Buscar valores por un nombre o identificador | Diccionario {clave: valor} |
| Valores únicos y operaciones de conjuntos | Set set() |
Ejercicio práctico: agenda de contactos
Crea un programa con un menú que permita:
- Agregar un contacto (nombre y teléfono).
- Buscar un contacto por nombre.
- Listar todos los contactos ordenados alfabéticamente.
- Salir.
Ver solución
agenda = {}
while True:
opcion = input("\n1) Agregar 2) Buscar 3) Listar 4) Salir: ")
if opcion == "1":
nombre = input("Nombre: ").strip().title()
telefono = input("Teléfono: ").strip()
agenda[nombre] = telefono
print("Guardado")
elif opcion == "2":
nombre = input("¿A quién buscas? ").strip().title()
print(agenda.get(nombre, "No encontrado"))
elif opcion == "3":
for nombre in sorted(agenda):
print(f"{nombre}: {agenda[nombre]}")
elif opcion == "4":
break
else:
print("Opción no válida")
Problema: al cerrar el programa, la agenda se pierde. En la próxima lección la organizarás con funciones y en la lección 8 la guardarás en un archivo.
Resumen
- Listas: ordenadas y modificables (
append,remove,sort). - Tuplas: inmutables, para datos fijos y desempaquetado.
- Diccionarios: pares clave-valor; usa
.get()y.items(). - Sets: elementos únicos y operaciones de conjuntos.
- Una lista de diccionarios representa una tabla de datos.
Crea tu cuenta, marca tus avances y descarga el certificado al terminar el curso.