¿Qué son los Diccionarios?
Los diccionarios son estructuras de datos que almacenan pares clave-valor. Son mutables, no ordenados (hasta Python 3.7+) y extremadamente eficientes para búsquedas.
Crear Diccionarios
# Diccionario vacío
diccionario_vacio = {}
otro_vacio = dict()
# Diccionario con datos
persona = {
"nombre": "Ana",
"edad": 25,
"ciudad": "Madrid"
}
# Usando dict()
estudiante = dict(nombre="Luis", edad=20, carrera="Ingeniería")
# Con diferentes tipos de valores
mixto = {
"texto": "Hola",
"numero": 42,
"lista": [1, 2, 3],
"diccionario": {"clave": "valor"}
}Acceder a Elementos
persona = {
"nombre": "Ana",
"edad": 25,
"ciudad": "Madrid"
}
# Acceso por clave
print(persona["nombre"]) # Ana
# Método get() - más seguro
print(persona.get("edad")) # 25
print(persona.get("telefono")) # None
print(persona.get("telefono", "No disponible")) # No disponible
# Acceder a claves anidadas
datos = {
"usuario": {
"nombre": "Carlos",
"contacto": {
"email": "carlos@email.com"
}
}
}
print(datos["usuario"]["contacto"]["email"]) # carlos@email.comModificar Diccionarios
persona = {"nombre": "Ana", "edad": 25}
# Modificar valor existente
persona["edad"] = 26
print(persona) # {"nombre": "Ana", "edad": 26}
# Agregar nueva clave-valor
persona["ciudad"] = "Barcelona"
print(persona)
# Actualizar múltiples valores
persona.update({"edad": 27, "profesion": "Ingeniera"})
print(persona)Métodos de Diccionarios
Métodos de Acceso
persona = {
"nombre": "Ana",
"edad": 25,
"ciudad": "Madrid"
}
# keys() - obtener todas las claves
claves = persona.keys()
print(list(claves)) # ["nombre", "edad", "ciudad"]
# values() - obtener todos los valores
valores = persona.values()
print(list(valores)) # ["Ana", 25, "Madrid"]
# items() - obtener pares clave-valor
items = persona.items()
print(list(items)) # [("nombre", "Ana"), ("edad", 25), ("ciudad", "Madrid")]Métodos de Eliminación
persona = {
"nombre": "Ana",
"edad": 25,
"ciudad": "Madrid",
"profesion": "Ingeniera"
}
# pop() - elimina y retorna valor
edad = persona.pop("edad")
print(edad) # 25
print(persona) # Sin "edad"
# popitem() - elimina y retorna último par
ultimo = persona.popitem()
print(ultimo) # ("profesion", "Ingeniera")
# del - elimina clave específica
del persona["ciudad"]
print(persona)
# clear() - vacía el diccionario
persona.clear()
print(persona) # {}Otros Métodos Útiles
# setdefault() - obtiene valor o lo establece
persona = {"nombre": "Ana"}
edad = persona.setdefault("edad", 25)
print(edad) # 25
print(persona) # {"nombre": "Ana", "edad": 25}
# copy() - copia superficial
original = {"a": 1, "b": 2}
copia = original.copy()
copia["a"] = 10
print(original) # {"a": 1, "b": 2}
print(copia) # {"a": 10, "b": 2}
# fromkeys() - crear diccionario con claves y valor por defecto
claves = ["nombre", "edad", "ciudad"]
diccionario = dict.fromkeys(claves, "Desconocido")
print(diccionario)
# {"nombre": "Desconocido", "edad": "Desconocido", "ciudad": "Desconocido"}Iterar sobre Diccionarios
persona = {
"nombre": "Ana",
"edad": 25,
"ciudad": "Madrid"
}
# Iterar sobre claves
for clave in persona:
print(clave)
# Iterar sobre claves explícitamente
for clave in persona.keys():
print(f"{clave}: {persona[clave]}")
# Iterar sobre valores
for valor in persona.values():
print(valor)
# Iterar sobre pares clave-valor (mejor práctica)
for clave, valor in persona.items():
print(f"{clave}: {valor}")Diccionarios Anidados
# Base de datos simple de estudiantes
estudiantes = {
"est001": {
"nombre": "Ana",
"edad": 20,
"notas": [8, 9, 7]
},
"est002": {
"nombre": "Luis",
"edad": 22,
"notas": [9, 9, 8]
}
}
# Acceder a datos anidados
print(estudiantes["est001"]["nombre"]) # Ana
print(estudiantes["est002"]["notas"][0]) # 9
# Iterar sobre diccionario anidado
for id_estudiante, datos in estudiantes.items():
print(f"ID: {id_estudiante}")
print(f"Nombre: {datos['nombre']}")
print(f"Promedio: {sum(datos['notas']) / len(datos['notas'])}")
print()Comprensión de Diccionarios
# Crear diccionario con comprensión
cuadrados = {x: x**2 for x in range(6)}
print(cuadrados) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# Con condición
pares = {x: x**2 for x in range(10) if x % 2 == 0}
print(pares) # {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
# Invertir diccionario
original = {"a": 1, "b": 2, "c": 3}
invertido = {v: k for k, v in original.items()}
print(invertido) # {1: "a", 2: "b", 3: "c"}
# Transformar valores
temperaturas_celsius = {"lunes": 20, "martes": 22, "miércoles": 19}
temperaturas_fahrenheit = {dia: (temp * 9/5) + 32 for dia, temp in temperaturas_celsius.items()}
print(temperaturas_fahrenheit)Operaciones Avanzadas
Combinar Diccionarios
# Python 3.5+: Usar ** para desempaquetar
dict1 = {"a": 1, "b": 2}
dict2 = {"c": 3, "d": 4}
combinado = {**dict1, **dict2}
print(combinado) # {"a": 1, "b": 2, "c": 3, "d": 4}
# Python 3.9+: Operador |
resultado = dict1 | dict2
print(resultado)
# update() modifica el original
dict1.update(dict2)
print(dict1) # {"a": 1, "b": 2, "c": 3, "d": 4}Verificar Existencia
persona = {"nombre": "Ana", "edad": 25}
# Verificar si existe clave
if "nombre" in persona:
print("La clave existe")
if "telefono" not in persona:
print("La clave no existe")
# Verificar si existe valor (menos eficiente)
if 25 in persona.values():
print("El valor existe")Ejemplos Prácticos
1. Contador de Palabras
texto = "python es genial python es poderoso python es fácil"
palabras = texto.split()
contador = {}
for palabra in palabras:
contador[palabra] = contador.get(palabra, 0) + 1
print(contador)
# {"python": 3, "es": 3, "genial": 1, "poderoso": 1, "fácil": 1}2. Agenda de Contactos
agenda = {}
def agregar_contacto(nombre, telefono):
agenda[nombre] = telefono
print(f"Contacto {nombre} agregado")
def buscar_contacto(nombre):
return agenda.get(nombre, "Contacto no encontrado")
def listar_contactos():
for nombre, telefono in agenda.items():
print(f"{nombre}: {telefono}")
agregar_contacto("Ana", "555-1234")
agregar_contacto("Luis", "555-5678")
print(buscar_contacto("Ana")) # 555-1234
listar_contactos()3. Sistema de Votación
votos = {}
def registrar_voto(candidato):
votos[candidato] = votos.get(candidato, 0) + 1
def mostrar_resultados():
print("\nResultados de votación:")
for candidato, cantidad in sorted(votos.items(), key=lambda x: x[1], reverse=True):
print(f"{candidato}: {cantidad} votos")
registrar_voto("Candidato A")
registrar_voto("Candidato B")
registrar_voto("Candidato A")
registrar_voto("Candidato C")
registrar_voto("Candidato A")
mostrar_resultados()Errores Comunes
# Error: Clave no existe
persona = {"nombre": "Ana"}
# print(persona["edad"]) # KeyError
# Solución: Usar get()
print(persona.get("edad", "No especificado")) # No especificado
# Error: Claves deben ser inmutables
# diccionario = {[1, 2]: "valor"} # TypeError
# Solución: Usar tuplas
diccionario = {(1, 2): "valor"} # OKConclusión
Los diccionarios son una de las estructuras de datos más poderosas y útiles de Python. Son perfectos para representar datos estructurados, contar elementos, mapear relaciones y mucho más. Dominar los diccionarios es esencial para cualquier programador Python.