QuieroProgramar por Rodri Gonzalez
Python · Lección 10 de 27

Diccionarios

Los diccionarios son la estructura de datos más importante para representar datos del mundo real. Cada fila de una base de datos, cada registro JSON de una API y cada fila de un CSV es esencialmente un diccionario: pares de clave y valor.

90–120 min Prerrequisitos: 08 Listas, 09 Tuplas
01

Concepto teórico

¿Qué es un diccionario?

Un diccionario (dict) es una colección de pares clave: valor. Cada clave es un identificador único que apunta a un valor. Es como un diccionario real de idiomas: buscás una palabra (clave) y encontrás su definición (valor). En Python se crean con llaves {}.

cliente = {
    "nombre": "García",
    "edad": 35,
    "ciudad": "Buenos Aires",
    "score": 720,
    "saldo": 250000,
    "activo": True
}

A diferencia de las listas (que accedés por posición numérica), en los diccionarios accedés por clave: cliente["nombre"] devuelve "García". Esto es mucho más legible y mantenible que cliente[0].

Punto clave: un diccionario es la versión Python de un registro (fila) de una base de datos. Cuando trabajés con pandas, cada fila de un DataFrame es convertible a diccionario con .to_dict(). Y cuando leas un JSON de una API, lo que recibís es un diccionario (o lista de diccionarios).

Características de los diccionarios

Analogía: un diccionario es como una guía telefónica: buscás por nombre (clave) y encontrás el teléfono (valor). No necesitás recorrer toda la guía — vas directo al nombre que necesitás. Una lista sería como tener los teléfonos en orden de llegada, sin nombres: para encontrar uno tenés que recorrer todos.

Acceso: [] vs .get()

Hay dos formas de acceder a un valor:

Regla profesional: usá .get() siempre que no estés 100% seguro de que la clave existe. En datos del mundo real, nunca sabés si un campo viene completo. Un KeyError en producción a las 3 AM te arruina el fin de semana. Un .get("score", 0) te devuelve un valor seguro.

Agregar, modificar y eliminar

Agregar y modificar usan la misma sintaxis: dict["clave"] = valor. Si la clave no existe, la crea. Si existe, la sobreescribe.

Para eliminar: del dict["clave"] (lanza error si no existe) o dict.pop("clave", default) (seguro, devuelve el valor eliminado).

Recorrer diccionarios

Los tres métodos de iteración que usás constantemente:

Diccionarios anidados

Un diccionario puede contener otros diccionarios como valores. Esto es la forma natural de representar datos JSON, que es el formato estándar de las APIs web:

cliente = {
    "nombre": "García",
    "scoring": {"valor": 720, "fecha": "2025-01-15", "entidad": "BCRA"},
    "cuentas": [
        {"tipo": "CA$", "saldo": 150000},
        {"tipo": "CA USD", "saldo": 5000}
    ]
}
# Acceso anidado:
print(cliente["scoring"]["valor"])     # 720
print(cliente["cuentas"][0]["saldo"])   # 150000
En el trabajo real: el 90% de los datos que vas a consumir vienen como JSON (APIs) o como DataFrames (pandas). Ambos son, en esencia, diccionarios o listas de diccionarios. Cada vez que hagas df.to_dict('records'), obtenés una lista de dicts. Cada vez que hagas requests.get(url).json(), obtenés un dict.

Dict comprehensions

Al igual que las list comprehensions, podés crear diccionarios en una línea:

{clave: valor for item in iterable if condición}

Tip profesional: los dict comprehensions son ideales para transformar datos rápidamente. Por ejemplo, invertir un diccionario ({v: k for k, v in original.items()}), filtrar pares ({k: v for k, v in d.items() if v > 100000}), o crear mappings ({nombre: score for nombre, score in zip(nombres, scores)}).
02

Ejemplos explicados paso a paso

Ejemplo 1: Crear, acceder y modificar

Las operaciones CRUD (Create, Read, Update, Delete) básicas de un diccionario.

ejemplo_01_crud.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 2: Recorrer con .items() — el patrón más usado

El 80% de las veces que trabajás con diccionarios, los recorrés con .items().

ejemplo_02_recorrer.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 3: Lista de diccionarios — la "base de datos en memoria"

Este es el patrón más importante del curso. Una lista de diccionarios es exactamente lo que devuelve df.to_dict('records') en pandas.

ejemplo_03_tabla.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 4: Dict comprehensions

Creá y transformá diccionarios en una sola línea.

ejemplo_04_comprehension.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 5: Diccionarios anidados — simulando JSON

Los datos de APIs y bases de datos NoSQL vienen como diccionarios anidados. Aprender a navegar estas estructuras es esencial.

ejemplo_05_anidado.pyPython

        
Hacé clic en ▶ Ejecutar
03

Referencia rápida

Operación Sintaxis Nota
Crear {"k": v} o dict(k=v) Las claves deben ser únicas
Leer (inseguro) d["clave"] KeyError si no existe
Leer (seguro) d.get("clave", default) Devuelve default si no existe
Agregar/Modificar d["clave"] = valor Crea si no existe, sobreescribe si existe
Eliminar (inseguro) del d["clave"] KeyError si no existe
Eliminar (seguro) d.pop("clave", default) Devuelve el valor eliminado
Merge d.update(otro_dict) Agrega/sobreescribe con otro dict
Claves d.keys() Vista de claves
Valores d.values() Vista de valores
Pares d.items() Vista de (clave, valor)
Pertenencia "clave" in d True/False — O(1)
Largo len(d) Cantidad de pares
Copiar d.copy() Copia superficial
Vaciar d.clear() Elimina todo
Comprehension {k:v for k,v in ...} Crear dict en una línea
04

Ejercicios

Nivel 1 · Básico

Ejercicio 1: Crear y acceder

Creá un diccionario producto con claves nombre, precio y stock. Imprimí cada valor. Debe incluir el nombre del producto.

ejercicio_01.pyDebe incluir "Notebook"

          
Hacé clic en ▶ Ejecutar
Nivel 1 · Básico

Ejercicio 2: .get() seguro

Dado un diccionario de cliente sin campo "email", usá .get() para acceder al email con default "No informado". Debe incluir No informado.

ejercicio_02.pyDebe incluir "No informado"

          
Hacé clic en ▶ Ejecutar
Nivel 1 · Básico

Ejercicio 3: Recorrer con .items()

Dado moneda = {"nombre": "Dólar", "código": "USD", "cotización": 1150}, recorrelo con .items() e imprimí cada par. Debe incluir USD.

ejercicio_03.pyDebe incluir "USD"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 4: Agregar, modificar y eliminar

Partiendo de {"nombre": "López", "saldo": 100000}: agregá "ciudad": "Córdoba", modificá saldo a 150000, eliminá ciudad con .pop(). Imprimí el dict final. Debe incluir 150000.

ejercicio_04.pyDebe incluir "150000"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 5: Dict comprehension desde listas

Tenés tickers = ["GGAL", "YPF", "PAMP"] y precios = [5200, 28000, 3100]. Creá un diccionario con dict comprehension y zip. Imprimilo. Debe incluir GGAL.

ejercicio_05.pyDebe incluir "GGAL"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 6: Contar frecuencias

Dada transacciones = ["compra", "venta", "compra", "compra", "venta", "transferencia", "compra"], contá cuántas veces aparece cada tipo usando un diccionario. Debe incluir compra y 4.

ejercicio_06.pyDebe incluir "4"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 7: Filtrar lista de diccionarios

Dada una lista de 4 clientes (dict con nombre, score, saldo), filtrá los que tienen score >= 650 y calculá el saldo promedio de los filtrados. Debe incluir Promedio.

ejercicio_07.pyDebe incluir "Promedio"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 8: Diccionario anidado

Creá un diccionario sucursal con "nombre", "ciudad" y "empleados" (lista de dicts con nombre y cargo). Imprimí el nombre del primer empleado accediendo a la estructura anidada. Debe incluir Gerente.

ejercicio_08.pyDebe incluir "Gerente"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 9: Transformar dict con comprehension

Dado precios_ars = {"Notebook": 920000, "Mouse": 23000, "Teclado": 46000} y DOLAR = 1150, creá un nuevo diccionario con los precios en USD (dividir por DOLAR, redondear a 2 decimales). Debe incluir USD.

ejercicio_09.pyDebe incluir "USD"

          
Hacé clic en ▶ Ejecutar
Nivel 4 · Desafío

Ejercicio 10: Reporte de cartera desde lista de dicts

Dada una lista de 5 clientes (nombre, ciudad, score, saldo), generá un reporte que incluya: tabla con todos los clientes, total de la cartera, promedio por ciudad (agrupación manual), y el cliente con mayor saldo. Debe incluir REPORTE.

ejercicio_10_desafio.pyDebe incluir "REPORTE"

          
Hacé clic en ▶ Ejecutar
05

Resumen y conexión

En la siguiente lección (11 · Sets) vas a aprender la última estructura de datos fundamental: conjuntos sin duplicados, ideales para deduplicar datos y hacer operaciones matemáticas de conjuntos.

Recursos: Python docs — Dictionaries · dict methods