Lección 6 de 12 · Nivel 2: Intermedio

Listas, tuplas, diccionarios y sets en Python

En esta lección
  1. Listas: colecciones ordenadas y modificables
  2. Tuplas: listas que no cambian
  3. Diccionarios: datos con nombre
  4. Listas de diccionarios: tu primera "base de datos"
  5. Conjuntos (set): elementos únicos
  6. ¿Cuál uso?
  7. Resumen
Lo que lograrás 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étodoQué 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
Copiar una lista no es asignarla

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")?

  • ["kiwi", "pera", "uva"]
  • ["pera", "uva", "kiwi"]
  • Da error, las listas no cambian

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)?

  • 0
  • KeyError
  • 12

.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]))?

  • 6
  • 3
  • 2

Un set guarda solo elementos únicos: {1, 2, 3}.

¿Cuál uso?

Necesitas…Usa
Una secuencia ordenada que vas a modificarLista []
Un grupo fijo de valores que no debe cambiarTupla ()
Buscar valores por un nombre o identificadorDiccionario {clave: valor}
Valores únicos y operaciones de conjuntosSet set()

Ejercicio práctico: agenda de contactos

Crea un programa con un menú que permita:

  1. Agregar un contacto (nombre y teléfono).
  2. Buscar un contacto por nombre.
  3. Listar todos los contactos ordenados alfabéticamente.
  4. 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.
¿Quieres tu certificado gratis?

Crea tu cuenta, marca tus avances y descarga el certificado al terminar el curso.

Inscribirme gratis