Ejercicio 13 Diccionarios (Colecciones)

Vamos a escribir el Ejercicio 13 Diccionarios del grupo Colecciones. Es recomendable que este ejercicio lo escribas (trata de no copiarlo y pegarlo), lo ejecutas y revisas el resultado esperado. Después utiliza el debugger para ejecutar el programa paso por paso.

"""
Ejercicio 13 Diccionarios
04/09/2025
Edito AHR
"""

# Los diccionarios son colecciones desordenadas de pares clave-valor
# Se definen con llaves {} y los pares clave-valor se separan por comas
# Las claves deben ser únicas e inmutables (números, cadenas, tuplas), mientras que los valores pueden ser de cualquier tipo de dato
# No se pueden accesar a traves de un indice, de hay que se diga que son desordenados
# Crear un diccionario con diferentes tipos de datos

diccionario1 = {}  # Crear un diccionario vacío
print("Imprimiendo diccionario1:", diccionario1)

diccionario = {
    "nombre": "Juan",
    "edad": 30,
    "ciudad": "Madrid",
    "activo": True,
    "hobbies": ["fútbol", "lectura", "viajes"]
}

# Imprimir el diccionario
print("Diccionario:", diccionario) 
print("Tipo de diccionario:", type(diccionario))
print("Longitud del diccionario:", len(diccionario))  # Imprime 5, ya que el diccionario tiene 5 pares clave-valor
print("Claves del diccionario:", diccionario.keys())  # Imprime las claves del diccionario
print("Valores del diccionario:", diccionario.values())  # Imprime los valores del diccionario
print("Ítems del diccionario:", diccionario.items())  # Imprime los pares clave-valor del diccionario  

# Acceder a elementos del diccionario mediante su clave
print("Nombre:", diccionario["nombre"])  # Imprime "Juan"   
print("Edad:", diccionario.get("edad"))  # Imprime 30
print("Ciudad:", diccionario["ciudad"])  # Imprime "Madrid"
print("¿Está activo?", diccionario.get("activo"))  # Imprime True
print("Hobbies:", diccionario["hobbies"])  # Imprime ["fútbol", "lectura", "viajes"]
print("Primer hobby:", diccionario["hobbies"][0])  # Imprime "fútbol"
# Intentar acceder a una clave que no existe (esto generará un error)

print("País:", diccionario.get("país", "No especificado"))  # Imprime "No especificado" si la clave no existe
print("Nombre:", diccionario.get("nombre", "No especificado"))  # Imprime "Juan" si la clave existe
# Agregar un nuevo par clave-valor al diccionario
diccionario["país"] = "España" # Agrega la clave "país" con el valor "España"
print("Diccionario después de agregar país:", diccionario)

# Actualizar el valor de una clave existente
diccionario["edad"] = 31  # Cambia la edad de 30 a 31
print("Diccionario después de actualizar edad:", diccionario)

# Eliminar un par clave-valor del diccionario
del diccionario["activo"]  # Elimina la clave "activo" y su valor
print("Diccionario después de eliminar activo:", diccionario)

# Eliminar un par clave-valor usando pop()
valor_eliminado = diccionario.pop("hobbies", "No especificado")
print("Diccionario después de usar pop():", diccionario)
print("Valor eliminado:", valor_eliminado)  # Limpiar el diccionario

# Limpiar el diccionario
diccionario.clear()  # El método clear() elimina todos los pares clave-valor del diccionario
print("Diccionario después de limpiar:", diccionario)  # Imprime {}
print("Longitud del diccionario después de limpiar:", len(diccionario))  # Imprime 0

# Verificar si una clave está en el diccionario
diccionario = {
    "nombre": "Juan",
    "edad": 30,
    "ciudad": "Madrid"
}
print("¿Nombre está en el diccionario?", "nombre" in diccionario)  # Imprime True
print("¿Edad está en el diccionario?", "edad" in diccionario)  # Imprime True
print("¿Ciudad está en el diccionario?", "ciudad" in diccionario)  # Imprime True
print("¿País está en el diccionario?", "país" in diccionario)  # Imprime False

# Verificar si una clave no está en el diccionario
print("¿País no está en el diccionario?", "país" not in diccionario)  # Imprime True
print("¿Nombre no está en el diccionario?", "nombre" not in diccionario)  # Imprime False  

# Diccionarios anidados
diccionario_anidado = {
    "persona": {
        "nombre": "Juan",
        "edad": 30,
        "ciudad": "Madrid"
    },
    "empleo": {
        "puesto": "Desarrollador",
        "empresa": "Tech Solutions"
    }
}

print("Diccionario anidado:", diccionario_anidado)
print("Nombre de la persona:", diccionario_anidado["persona"]["nombre"])  # Imprime "Juan"
print("Puesto de empleo:", diccionario_anidado["empleo"]["puesto"])  # Imprime "Desarrollador"
print("Empresa de empleo:", diccionario_anidado["empleo"]["empresa"])  # Imprime "Tech Solutions"
# Actualizar un valor en un diccionario anidado
diccionario_anidado["persona"]["edad"] = 31  # Cambia la edad de 30 a 31
print("Diccionario anidado después de actualizar edad:", diccionario_anidado)  # Agregar un nuevo par clave-valor en un diccionario anidado
diccionario_anidado["persona"]["país"] = "España"  # Agrega la clave "país" con el valor "España"
print("Diccionario anidado después de agregar país:", diccionario_anidado)  

# Eliminar un par clave-valor en un diccionario anidado
del diccionario_anidado["empleo"]["empresa"]  # Elimina la clave "empresa" y su valor
print("Diccionario anidado después de eliminar empresa:", diccionario_anidado)

# Eliminar un par clave-valor usando pop() en un diccionario anidado
valor_eliminado = diccionario_anidado["persona"].pop("ciudad", "No especificado")
print("Diccionario anidado después de usar pop():", diccionario_anidado)            
print("Valor eliminado:", valor_eliminado)  # Imprime "Madrid"

# Limpiar un diccionario anidado
diccionario_anidado["empleo"].clear()  # El método clear() elimina todos los pares clave-valor del diccionario anidado "empleo"
print("Diccionario anidado después de limpiar empleo:", diccionario_anidado) 
print("Longitud del diccionario anidado después de limpiar empleo:", len(diccionario_anidado["empleo"]))  # Imprime 0

# Nota: No se pueden usar listas o diccionarios como claves en un diccionario, ya que no son inmutables

# Sin embargo, se pueden usar tuplas como claves si contienen solo elementos inmutables (enteros, cadenas, tuplas)
diccionario_tupla_clave = {
    ("nombre", "Juan"): 1,
    ("edad", 30): 2,
    ("ciudad", "Madrid"): 3
}   
print("Diccionario con tuplas como claves:", diccionario_tupla_clave)
print("Valor para la clave ('nombre', 'Juan'):", diccionario_tupla_clave[("nombre", "Juan")])  # Imprime 1
print("Valor para la clave ('edad', 30):", diccionario_tupla_clave[("edad", 30)])  # Imprime 2
print("Valor para la clave ('ciudad', 'Madrid'):", diccionario_tupla_clave[("ciudad", "Madrid")])  # Imprime 3

# Intentar usar una lista o diccionario como clave (esto generará un error)
# diccionario_lista_clave = {   ["nombre", "Juan"]: 1}  # Error: las listas no son inmutables
# diccionario_diccionario_clave = {   {"nombre": "Juan"}: 1}  # Error: los diccionarios no son inmutables
# Fin del ejercicio de diccionarios 

Veamos los resultados en la consola:

PS C:\Users\Codigo/Modulo 3/Capitulo_2/Ejercicio_13_Diccionarios.py"
Imprimiendo diccionario1: {}
Diccionario: {'nombre': 'Juan', 'edad': 30, 'ciudad': 'Madrid', 'activo': True, 'hobbies': ['fútbol', 'lectura', 'viajes']}
Tipo de diccionario: <class 'dict'>
Longitud del diccionario: 5
Claves del diccionario: dict_keys(['nombre', 'edad', 'ciudad', 'activo', 'hobbies'])
Valores del diccionario: dict_values(['Juan', 30, 'Madrid', True, ['fútbol', 'lectura', 'viajes']])
Ítems del diccionario: dict_items([('nombre', 'Juan'), ('edad', 30), ('ciudad', 'Madrid'), ('activo', True), ('hobbies', ['fútbol', 'lectura', 'viajes'])])
Nombre: Juan
Edad: 30
Ciudad: Madrid
¿Está activo? True
Hobbies: ['fútbol', 'lectura', 'viajes']
Primer hobby: fútbol
País: No especificado
Nombre: Juan
Diccionario después de agregar país: {'nombre': 'Juan', 'edad': 30, 'ciudad': 'Madrid', 'activo': True, 'hobbies': ['fútbol', 'lectura', 'viajes'], 'país': 'España'}
Diccionario después de actualizar edad: {'nombre': 'Juan', 'edad': 31, 'ciudad': 'Madrid', 'activo': True, 'hobbies': ['fútbol', 'lectura', 'viajes'], 'país': 'España'}
Diccionario después de eliminar activo: {'nombre': 'Juan', 'edad': 31, 'ciudad': 'Madrid', 'hobbies': ['fútbol', 'lectura', 'viajes'], 'país': 'España'}
Diccionario después de usar pop(): {'nombre': 'Juan', 'edad': 31, 'ciudad': 'Madrid', 'país': 'España'}
Valor eliminado: ['fútbol', 'lectura', 'viajes']
Diccionario después de limpiar: {}
Longitud del diccionario después de limpiar: 0
¿Nombre está en el diccionario? True
¿Edad está en el diccionario? True
¿Ciudad está en el diccionario? True
¿País está en el diccionario? False
¿País no está en el diccionario? True
¿Nombre no está en el diccionario? False
Diccionario anidado: {'persona': {'nombre': 'Juan', 'edad': 30, 'ciudad': 'Madrid'}, 'empleo': {'puesto': 'Desarrollador', 'empresa': 'Tech Solutions'}}
Nombre de la persona: Juan
Puesto de empleo: Desarrollador
Empresa de empleo: Tech Solutions
Diccionario anidado después de actualizar edad: {'persona': {'nombre': 'Juan', 'edad': 31, 'ciudad': 'Madrid'}, 'empleo': {'puesto': 'Desarrollador', 'empresa': 'Tech Solutions'}}
Diccionario anidado después de agregar país: {'persona': {'nombre': 'Juan', 'edad': 31, 'ciudad': 'Madrid', 'país': 'España'}, 'empleo': {'puesto': 'Desarrollador', 'empresa': 'Tech Solutions'}}   
Diccionario anidado después de eliminar empresa: {'persona': {'nombre': 'Juan', 'edad': 31, 'ciudad': 'Madrid', 'país': 'España'}, 'empleo': {'puesto': 'Desarrollador'}}
Diccionario anidado después de usar pop(): {'persona': {'nombre': 'Juan', 'edad': 31, 'país': 'España'}, 'empleo': {'puesto': 'Desarrollador'}}
Valor eliminado: Madrid
Diccionario anidado después de limpiar empleo: {'persona': {'nombre': 'Juan', 'edad': 31, 'país': 'España'}, 'empleo': {}}
Longitud del diccionario anidado después de limpiar empleo: 0
Diccionario con tuplas como claves: {('nombre', 'Juan'): 1, ('edad', 30): 2, ('ciudad', 'Madrid'): 3}
Valor para la clave ('nombre', 'Juan'): 1
Valor para la clave ('edad', 30): 2
Valor para la clave ('ciudad', 'Madrid'): 3