Diccionarios en Python: Guía Completa con Métodos y Ejemplos

👤 Admin 📅 11 de noviembre, 2025 ⏱ 16 min 🏷 Python Intermedio

¿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.com

Modificar 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"}  # OK

Conclusió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.