Tutorial del diccionario Python: Métodos, ejemplos y patrones comunes
Los diccionarios están en todas partes en Python, desde las respuestas JSON hasta la configuración. Aprenda a crearlos, leerlos y actualizarlos, luego elija los patrones de conteo, agrupación y fusión que usará en proyectos reales.
- Un diccionario de Python almacena pares de clave y valor, y busca un valor por su clave muy rápidamente.
- Utilice
get()cuando falte una clave, ya que los corchetes elevanKeyError. - Las claves deben ser hash, como cadenas, números o tuplas. Las listas no pueden ser claves.
copy()es poco profundo, por lo que los datos anidados permanecen compartidos a menos que usesdeepcopy.
Si una lista es una fila de cuadros numerados, un diccionario de Python es un conjunto de cuadros etiquetados. Usted solicita lo que desea por nombre en lugar de por posición, razón por la cual los diccionarios se encuentran detrás de los datos JSON, la configuración, los cachés y gran parte del propio Python.
Este tutorial comienza con lo básico y continúa con los patrones que los desarrolladores experimentados utilizan todos los días. Ejecutamos todos los ejemplos en Python 3.13 y el resultado que se muestra proviene de esa ejecución.
¿Qué es un diccionario?
Un diccionario, o dict, asigna claves a valores. Cada clave aparece sólo una vez y los valores pueden ser cualquier cosa, incluidas listas u otros diccionarios.
| Tipo | Acceso por | ordenado | Duplicados | Lo mejor para |
|---|---|---|---|---|
lista |
Posición | si | Permitido | Secuencias |
tupla |
Posición | si | Permitido | Registros fijos |
conjunto |
Solo membresía | No | No permitido | Artículos únicos |
dictar |
clave | Orden de inserción | Las claves son únicas. | Búsquedas por nombre |
Desde Python 3.7, los diccionarios mantienen oficialmente el orden de inserción. Muchos tutoriales antiguos todavía los llaman desordenados, lo cual ya no es cierto. Para obtener una comparación más amplia de los otros tipos, consulte Lista de Python, tupla y conjunto.
Las búsquedas son rápidas porque los diccionarios utilizan una tabla hash. Verificar una clave lleva aproximadamente el mismo tiempo ya sea que el diccionario contenga diez elementos o un millón, mientras que la búsqueda en una lista se vuelve más lenta a medida que crece.
Crear un diccionario
user = {"name": "Asha", "age": 31, "city": "Pune"}
empty = {}
from_keywords = dict(name="Asha", age=31)
from_pairs = dict([("a", 1), ("b", 2)])
Las llaves son la forma más común. Una trampa: {} crea un diccionario vacío, no un conjunto vacío. Para un conjunto vacío, necesita set().
Leer valores de forma segura
Hay dos formas de leer un valor y la diferencia es importante cuando es posible que una clave no exista:
user["name"] # 'Asha'
user["email"] # KeyError: 'email'
user.get("email") # None
user.get("email", "not set") # 'not set'
Utilice corchetes cuando la clave deba existir, de modo que una clave faltante falle ruidosamente. Utilice get() cuando la ausencia sea normal, como un campo opcional en una respuesta API. Para verificar una clave, use el operador in, que busca claves en lugar de valores:
"city" in user # True
"Pune" in user # False
Agregar, actualizar y eliminar
La asignación de una clave la actualiza si existe o la agrega si no existe:
user["age"] = 32
user["email"] = "asha@example.com"
print(user)
# {'name': 'Asha', 'age': 32, 'city': 'Pune', 'email': 'asha@example.com'}
Python ofrece varias formas de eliminar elementos:
user.pop("city") # returns 'Pune' and removes it
user.pop("phone", None) # no error if it is missing
del user["email"] # removes it, and raises KeyError if missing
user.clear() # empties the dictionary
Utilice pop() cuando desee recuperar el valor. Pasar un valor predeterminado como segundo argumento evita un error cuando la clave no está allí. popitem() elimina y devuelve el par agregado más recientemente.
Recorrer un diccionario
Hacer un bucle directamente te da las claves. Para obtener claves y valores, utilice items():
user = {"name": "Asha", "age": 32}
for key, value in user.items():
print(key, "=", value)
# name = Asha
# age = 32
keys(), values() y items() devuelven vistas en vivo en lugar de copias, por lo que reflejan cambios posteriores. No agregue ni elimine claves mientras recorre un diccionario, porque Python genera un RuntimeError. Pase por list(user) si necesita hacerlo.
Consejo: La verificación in en un diccionario es rápida, pero "Pune" in user.values() tiene que escanear cada valor. Si hace esto a menudo con una gran cantidad de datos, es posible que su diccionario esté escrito al revés.
Hoja de referencia de métodos de diccionario
| Método | que hace |
|---|---|
obtener (k, predeterminado) |
Devuelve un valor, o el valor predeterminado si falta la clave |
keys() |
Devuelve una vista de las claves. |
values() |
Devuelve una vista de los valores. |
items() |
Devuelve una vista de pares clave y valor. |
update(other) |
Agrega o sobrescribe desde otro diccionario |
pop(k, predeterminado) |
Elimina una clave y devuelve su valor. |
popitem() |
Elimina y devuelve el último par agregado. |
establecer predeterminado (k, v) |
Devuelve el valor y primero inserta v si falta la clave |
copy() |
Devuelve una copia superficial |
clear() |
Elimina todo |
dict.fromkeys(claves,v) |
Construye un diccionario a partir de una lista de claves. |
Fusionar diccionarios
Una necesidad común es aplicar la configuración del usuario además de la predeterminada. Cuando las teclas chocan, gana el lado derecho:
defaults = {"theme": "light", "lang": "en"}
saved = {"theme": "dark"}
defaults | saved
{**defaults, **saved}
# Both give: {'theme': 'dark', 'lang': 'en'}
El operador | necesita Python 3.9 o posterior, mientras que la versión ** también funciona en versiones anteriores. Ambos crean un nuevo diccionario. Por el contrario, defaults.update(saved) y defaults |= saved cambian defaults en su lugar.
Comprensiones y clasificación
Las comprensiones de diccionario crean un nuevo diccionario en una sola línea legible, tal como lo hacen las comprensiones de listas con las listas:
prices = {"pen": 10, "book": 250, "bag": 900}
{k: v for k, v in prices.items() if v > 100}
# {'book': 250, 'bag': 900}
Para ordenar por valor, pase una función key a sorted(). Para encontrar la clave con el valor más grande, use max():
sorted(prices.items(), key=lambda item: item[1], reverse=True)
# [('bag', 900), ('book', 250), ('pen', 10)]
max(prices, key=prices.get)
# 'bag'
Un diccionario no tiene método sort() y sorted() devuelve una lista de pares. Envuelva el resultado en dict() si desea un diccionario en ese orden.
Patrones de conteo y agrupación.
Constantemente surgen dos tareas. El primero es contar, lo cual puedes hacer usando get() con un valor predeterminado de cero:
words = "to be or not to be".split()
counts = {}
for word in words:
counts[word] = counts.get(word, 0) + 1
print(counts)
# {'to': 2, 'be': 2, 'or': 1, 'not': 1}
La biblioteca estándar hace esto aún más corto con Counter:
from collections import Counter
Counter(words).most_common(2)
# [('to', 2), ('be', 2)]
El segundo es agrupar, y defaultdict es ideal aquí porque crea el valor faltante:
from collections import defaultdict
orders = [("Asha", 1200), ("Ben", 300), ("Asha", 800)]
by_customer = defaultdict(list)
for name, total in orders:
by_customer[name].append(total)
print(dict(by_customer))
# {'Asha': [1200, 800], 'Ben': [300]}
Sin él, deberá verificar si cada clave existe antes de agregarla. Estos mismos patrones funcionan bien para agregar datos de API o líneas de registro. Cuando un diccionario está vacío o falta una clave, nuestra guía para el manejo de excepciones de Python muestra cómo lidiar con el resultado KeyError.
Datos anidados y la trampa de copia
JSON se asigna directamente a listas y diccionarios anidados, por lo que a menudo encadenarás claves. Encadenar get() mantiene esto seguro cuando puede faltar un nivel:
response = {"user": {"profile": {"city": "Pune"}}}
response["user"]["profile"]["city"] # 'Pune'
response.get("user", {}).get("settings", {}).get("theme") # None
Tenga cuidado al copiar datos anidados. copy() duplica solo el nivel superior, por lo que los diccionarios internos permanecen compartidos con el original:
settings = {"db": {"host": "localhost"}}
shallow = settings.copy()
shallow["db"]["host"] = "prod"
print(settings["db"]["host"])
# prod
Cambiar la copia cambió el original, lo que puede ser un error desagradable. Utilice copy.deepcopy(settings) para obtener una copia totalmente independiente.
¿Qué puede ser una clave de diccionario?
Las claves deben ser hashable, lo que generalmente significa inmutable. Cadenas, números y tuplas de valores inmutables funcionan. Las listas y diccionarios no:
{["a"]: 1}
# TypeError: unhashable type: 'list'
La razón es que el hash de una clave decide dónde se almacena su valor. Si una clave pudiera cambiar, Python ya no podría encontrarla. Si necesita una clave compuesta, utilice una tupla, como {("Pune", 2026): 120}.
Errores comunes
- Uso de corchetes en claves opcionales. Busque
get()cuando pueda faltar una clave. - Suponiendo que
get()significa que la clave existe.Nonepodría significar que falta o está almacenadaNone. Utiliceincuando la diferencia sea importante. - Usando un valor predeterminado mutable.
dict.fromkeys(names, [])le da a cada clave la misma lista. Utilice una comprensión en su lugar. - Cambio de tamaño durante la iteración. Recorre una copia de las claves.
- Usar un dict para campos fijos y conocidos. Un
dataclasspuede ser más claro y detecta errores tipográficos en los nombres de los campos.
Conclusión
Los diccionarios recompensan un poco de práctica. Recuerde get() para claves opcionales, items() para bucles y Counter y defaultdict para los dos trabajos más comunes. Para practicar, tome un pequeño archivo JSON y escriba código para contar y agrupar sus registros. Si eres nuevo en el idioma, comienza con nuestro tutorial de Python para principiantes.
Preguntas frecuentes
¿Qué es un diccionario en Python?
Un diccionario es una colección integrada que almacena pares de clave y valor. Se busca un valor por su clave, lo cual es rápido incluso con una gran cantidad de datos.
¿Están ordenados los diccionarios de Python?
Sí. Desde Python 3.7, se garantiza que los diccionarios mantendrán el orden en el que se insertaron las claves. La actualización de una clave existente no cambia su posición.
¿Cuál es la diferencia entre get() y corchetes?
Los corchetes generan KeyError cuando falta una clave. get() devuelve Ninguno, o un valor predeterminado que usted proporcione, por lo que se adapta a las claves que son opcionales.
¿Puede un diccionario tener claves duplicadas?
No. Cada clave es única. La asignación a una clave existente reemplaza su valor y, si un literal repite una clave, gana el último valor.
¿Cómo fusiono dos diccionarios en Python?
Utilice un | b en Python 3.9 o posterior, o {**a, **b} en versiones anteriores. Ambos crean un nuevo diccionario y los valores de b ganan cuando las claves chocan.
sigue aprendiendo
¿Necesitas ayuda con pruebas, WordPress o SEO?
Ayudamos a los equipos a enviar mejor software y hacer crecer sus sitios. Cuéntenos en qué está trabajando y le sugeriremos un siguiente paso claro.
Más guías sobre testing, IA y desarrollo moderno
¿Te gustó este artículo? Elige un tema y salta directo a nuestros tutoriales más recientes.
Explicación de las alucinaciones de la IA: por qué los modelos de lenguaje inventan cosas y cómo reducirlas
Se explicaron las alucinaciones de la IA: qué son, por qué los modelos de lenguaje las producen, tipos comunes, cómo reducirlas con conexión a tierr…
Leer artículo →DevOpsExplicación de las variables de entorno: archivos .env, secretos y configuración bien hechos
Variables de entorno explicadas con ejemplos de Python que ejecutamos: leerlas y configurarlas, por qué cada valor es una cadena, archivos .env, her…
Leer artículo →Desarrollo de softwareExplicación de la limitación de velocidad de API: algoritmos, encabezados y manejo de errores 429
La limitación de la tasa de API se explica con una simulación que ejecutamos: depósito de tokens, ventana fija, ventana deslizante, 429 respuestas, …
Leer artículo →Automatización de pruebasBurlarse en Python: unittest.mock, patch y los errores que hacen que las pruebas mientan
Burlarse en Python con unittest.mock, probado: Mock y return_value, side_effect, parches donde se usa un nombre, especificación y autospec, fechas d…
Leer artículo →Pruebas de softwareExplicación de la cobertura del código: cobertura de línea versus sucursal y lo que realmente significa 100%
Cobertura del código explicada con una ejecución real de cobertura.py: cobertura de línea, rama y condición, lectura de un informe, por qué una cobe…
Leer artículo →Bases de datos y SQLDELETE vs TRUNCATE vs DROP en SQL: diferencias, reversión y cuándo usar cada uno
DELETE vs TRUNCATE vs DROP explicado con SQL probado: qué elimina cada uno, reversión, activadores, restablecimiento de identidad, velocidad y en qu…
Leer artículo →Bases de datos y SQLVistas SQL explicadas: cree, use y evite los errores, con ejemplos
Vistas SQL explicadas con consultas que ejecutamos: creación de una vista, resultados en vivo, ocultación de columnas, rendimiento, vistas actualiza…
Leer artículo →Desarrollo de softwareInterfaz TypeScript versus tipo: diferencias reales, probadas con el compilador
Interfaz TypeScript versus tipo, verificado con el compilador real: qué pueden hacer ambos, qué puede hacer solo uno, fusión de declaraciones, exten…
Leer artículo →Desarrollo de softwarePython *args y **kwargs explicados: funciones flexibles con ejemplos claros
Python *args y **kwargs explicados con el código que ejecutamos: empaquetado y desempaquetado, orden de parámetros, argumentos solo de palabras clav…
Leer artículo →Desarrollo de softwareFunciones Lambda de Python: sintaxis, usos reales y cuándo no utilizarlas
Funciones lambda de Python explicadas con el código que ejecutamos: sintaxis, clasificación con clave, mapa y filtro, cierres, trampa de enlace tard…
Leer artículo →Inteligencia artificial¿Qué son los agentes de IA? Cómo funcionan, con un bucle de agente simple que puedes ejecutar
¿Qué son los agentes de IA? Una guía sencilla sobre el bucle del agente, las herramientas, la memoria y las barreras de seguridad, con un pequeño bu…
Leer artículo →DevOpsMonitoreo versus observabilidad: la verdadera diferencia, con registros, métricas y seguimientos
Explicación del monitoreo versus observabilidad: fallas conocidas y desconocidas, registros, métricas y seguimientos, un recorrido por incidentes de…
Leer artículo →DevOpsDocker Volumes versus Bind Mounts: persistir los datos del contenedor de la manera correcta
Se explican los volúmenes de Docker frente a los montajes de enlace: por qué desaparecen los datos del contenedor, volúmenes con nombre, montajes de…
Leer artículo →Automatización de pruebasTDD vs BDD: diferencias clave, una función creada en ambos sentidos y cuándo usar cada una
TDD vs BDD explicado con una característica de descuento construida en ambos sentidos: refactor rojo-verde con el código que ejecutamos, escenarios …
Leer artículo →Pruebas de softwarePruebas de Aceptación de Usuario (UAT): Proceso, Lista de Verificación y Ejemplos Reales
Explicación de las pruebas de aceptación del usuario: quién las ejecuta, en qué se diferencia del control de calidad, un proceso de siete pasos, una…
Leer artículo →Bases de datos y SQLValores NULL de SQL explicados: IS NULL, COALESCE, NULLIF y las trampas que se deben evitar
Los valores NULL de SQL se explican con las consultas que ejecutamos: lógica de tres valores, IS NULL, COALESCE, NULLIF, cómo los agregados, las uni…
Leer artículo →Bases de datos y SQLDeclaración SQL CASE WHEN: sintaxis, ejemplos reales y errores comunes
CASO SQL CUANDO se explicó con las consultas que ejecutamos: formularios simples y buscados, orden de condiciones, pivotes con SUMA, trucos COUNT, c…
Leer artículo →Desarrollo de software¿Qué es JWT? Tokens web JSON explicados con un ejemplo práctico
¿Qué es JWT? JSON Web Tokens explicó: las tres partes, un token creado y manipulado en el código que ejecutamos, JWT vs sesiones, almacenamiento, to…
Leer artículo →Desarrollo de softwareExplicación del bucle de eventos de JavaScript: pila de llamadas, microtareas y temporizadores con ejemplos
El bucle de eventos de JavaScript explicado con el código que ejecutamos: pila de llamadas, colas de tareas y microtareas, por qué setTimeout 0 no e…
Leer artículo →Desarrollo de softwareExplicación de los generadores y el rendimiento de Python: ahorre memoria con ejemplos reales
Los generadores de Python y el rendimiento se explican con el código que ejecutamos: cómo se pausan y reanudan, midieron el ahorro de memoria, canal…
Leer artículo →Inteligencia artificial¿Qué son las incrustaciones? Los vectores y la similitud del coseno se explican de forma sencilla
¿Qué son las incrustaciones? Una guía en lenguaje sencillo sobre vectores, similitud de cosenos y búsqueda semántica, con un pequeño ejemplo que eje…
Leer artículo →DevOpsImplementación azul-verde versus implementación canaria: diferencias, compensaciones y cómo elegir
Explicación de la implementación azul-verde versus canaria: cómo funciona cada uno, costo, riesgo y reversión, agrupación estable de usuarios que pr…
Leer artículo →Automatización de pruebasPruebas inestables: qué las causa y cómo solucionarlas para siempre
Pruebas inestables explicadas con demostraciones que realizamos: las causas principales, cómo confirmar y diagnosticar una, correcciones adecuadas p…
Leer artículo →Pruebas de softwarePruebas de carga frente a pruebas de estrés: diferencias, métricas y ejemplos de k6
Explicación de las pruebas de carga frente a las pruebas de estrés: qué prueba cada una, pruebas de picos y de absorción, las métricas que importan,…
Leer artículo →Pruebas de softwareCaso de prueba frente a escenario de prueba: diferencias clave, ejemplos y cuándo utilizar cada uno
Caso de prueba versus escenario de prueba explicado: definiciones claras, una tabla en paralelo, una función de restablecimiento de contraseña tomad…
Leer artículo →Bases de datos y SQLOptimización de consultas SQL: lea planes de ejecución y corrija consultas lentas, con tiempos
Optimización de consultas SQL probada en un millón de filas: lea planes de ejecución, agregue los índices correctos, corrija filtros no sargables, u…
Leer artículo →Bases de datos y SQLSQL UNION vs UNION ALL: diferencias, ejemplos y rendimiento probado
SQL UNION vs UNION ALL explicado con consultas que ejecutamos: duplicados, las reglas que siguen ambos, un error de datos real, rendimiento medido, …
Leer artículo →Desarrollo de softwareTutorial de JavaScript Fetch API: GET, POST, manejo de errores y tiempos de espera
Un tutorial de JavaScript Fetch API probado en un servidor local: GET y POST, por qué 404 no arroja, un asistente reutilizable, cadenas de consulta,…
Leer artículo →Desarrollo de softwareManejo de archivos Python: lectura, escritura, CSV, JSON y pathlib con ejemplos
El manejo de archivos Python se explica con el código que ejecutamos: modos abiertos, lectura de archivos grandes, CSV, JSON, pathlib, archivos bina…
Leer artículo →Desarrollo de softwareClases y objetos de Python: tutorial de programación orientada a objetos con ejemplos reales
Clases y objetos de Python explicados con el código que ejecutamos: __init__, métodos, atributos de clase versus instancia, herencia, propiedades, m…
Leer artículo →Inteligencia artificial¿Qué es un modelo de lenguaje grande? Cómo funcionan los LLM, explicados sin exageraciones
¿Qué es un modelo de lenguaje grande? Los LLM explicados en lenguaje sencillo: tokens, incrustaciones, atención, entrenamiento, ventanas de temperat…
Leer artículo →DevOpsComandos de Linux para principiantes: la guía esencial de terminal con ejemplos
Comandos de Linux para principiantes, agrupados por tarea: navegación, archivos, visualización de registros, grep, canalizaciones, permisos, proceso…
Leer artículo →Automatización de pruebasSelenium vs Playwright: diferencias clave, comparación de códigos y cuál elegir
Comparación de Selenium vs Playwright: arquitectura, espera, soporte de navegador e idioma, depuración, la misma prueba en ambas herramientas, conse…
Leer artículo →Pruebas de softwarePartición de equivalencia: técnica de diseño de pruebas explicada con ejemplos resueltos
Explicación de la partición de equivalencia: cómo encontrar particiones válidas e inválidas, ejemplos prácticos para edades, contraseñas y cupones, …
Leer artículo →Pruebas de softwareSeveridad vs Prioridad en Pruebas de Software: Diferencias, Matriz y Ejemplos Reales
Explicación de gravedad versus prioridad en las pruebas de software: definiciones claras, una matriz de cuatro vías con ejemplos, escalas de niveles…
Leer artículo →Bases de datos y SQLTutorial de subconsultas SQL: tipos, subconsultas correlacionadas y EXISTENCIAS con ejemplos
Un tutorial de subconsultas SQL con consultas que ejecutamos: subconsultas escalares, IN, FROM y SELECT, subconsultas correlacionadas, EXISTS, la tr…
Leer artículo →Bases de datos y SQLTransacciones SQL y ACID explicados: COMMIT, ROLLBACK y niveles de aislamiento
Transacciones SQL y ACID explicadas con una transferencia bancaria que ejecutamos: COMMIT, ROLLBACK, puntos de guardado, bloqueos, niveles de aislam…
Leer artículo →Desarrollo de softwareHoja de trucos de comandos de Git: los comandos que realmente usas, con ejemplos
Una hoja de referencia de comandos de Git agrupada por tarea: configuración, preparación, ramas, controles remotos, almacenamiento, historial y desh…
Leer artículo →Desarrollo de softwareExplicación de las promesas de JavaScript: luego, captura, Promise.all y errores comunes
Las promesas de JavaScript se explican con el código que ejecutamos: estados, luego y cadenas de captura, manejo de errores, Promise.all, allSettled…
Leer artículo →Desarrollo de softwareTutorial del diccionario Python: métodos, ejemplos y patrones comunes
Un tutorial de diccionario de Python con el código que ejecutamos: crear, leer y actualizar dictados, métodos clave, fusión, comprensión, patrones d…
Leer artículo →Inteligencia artificial¿Qué es el RAG? Generación de recuperación aumentada explicada con un ejemplo práctico
¿Qué es RAG? Generación de recuperación aumentada explicada paso a paso: indexación, fragmentación, incrustaciones, recuperación, un pequeño ejemplo…
Leer artículo →DevOpsTutorial de Terraform para principiantes: infraestructura como código desde el primer archivo hasta los módulos
Un tutorial de Terraform para principiantes: comience sin una cuenta en la nube, aprenda init, planifique y aplique, luego variables, resultados, es…
Leer artículo →DevOpsDocker vs Kubernetes: diferencias clave, cómo funcionan juntos y cuál necesita
Docker vs Kubernetes explicó: qué hace cada uno, la misma aplicación se ejecuta con ambos, se comparan Docker Compose y Swarm, los Dockershim cambia…
Leer artículo →Automatización de pruebasTutorial de Pytest para principiantes: accesorios, parametrización y ejemplos reales
Un tutorial de pytest para principiantes con pruebas que ejecutamos en pytest 9.2: afirmaciones, accesorios, parametrización, conftest, marcadores, …
Leer artículo →Pruebas de softwareCiclo de vida de pruebas de software (STLC): 6 fases, criterios de entrada y salida, ejemplo
Se explicó el ciclo de vida de las pruebas de software: seis fases de STLC con criterios de entrada y salida, entregables, un ejemplo de función de …
Leer artículo →Desarrollo de softwareGit merge vs rebase: diferencias, ejemplos y cuándo usar cada uno
Git merge vs rebase explicado con salida real del log, una tabla comparativa, la regla de oro del rebase y un flujo de trabajo seguro para equipos.
Leer artículo →Desarrollo de softwareList comprehension en Python: sintaxis, ejemplos y cuándo evitarla
List comprehension en Python explicada: sintaxis, filtros, if-else, bucles anidados, tiempos medidos y cuándo es mejor un bucle for normal.
Leer artículo →