2.1.3.1 Diccionarios#

Los diccionarios (en inglés, dict) son la segunda estructura de datos más importante de Python, después de las listas.

La diferencia clave es:

  • Las Listas se organizan por un índice numérico (0, 1, 2, …).

  • Los Diccionarios se organizan por una clave (en inglés, «key»).

Piensa en un diccionario real: no buscas la palabra 500, buscas la palabra «Python». Aquí es igual. Usamos una «clave» (que suele ser un string) para guardar y encontrar un «valor».

Se definen con llaves {} y usan el formato clave: valor.

# Un diccionario vacío
diccionario_vacio = {}
print(diccionario_vacio)

# Un diccionario simple
# La clave es el string (ej. "nombre") y el valor es lo que sigue (ej. "Ana")
persona = {
    "nombre": "Ana",
    "edad": 30,
    "ciudad": "Madrid"
}

print(persona["nombre"])
{}
Ana

Accediendo a los Valores#

Para obtener un valor, no usamos un índice numérico, usamos su clave entre corchetes [].

persona = {
    "nombre": "Ana",
    "edad": 30,
    "ciudad": "Madrid"
    ,0:"hola"
}

# Accedemos al valor asociado con la clave "nombre"
print("Nombre:", persona["nombre"])

# Accedemos al valor de la clave "edad"
print("Edad:", persona["edad"])

# Esto daría un error, ¡los diccionarios no usan índices!
print(persona[0])
Nombre: Ana
Edad: 30
hola

Añadir y Modificar Elementos#

Añadir un nuevo par (clave-valor) o modificar uno existente es muy fácil. Simplemente asigna un valor a una clave.

  • Si la clave ya existe, su valor se actualiza.

  • Si la clave no existe, se crea un nuevo par clave-valor.

persona = {
    "nombre": "Ana",
    "edad": 30,
    "ciudad": "Madrid"
}
print("Original:", persona)

# 1. Modificar un valor existente
# Cambiamos la clave "edad" de 30 a 31
persona["edad"] = 31
print("Modificado:", persona)

# 2. Añadir un nuevo par clave-valor
# La clave "profesion" no existía, así que se añade
persona["profesion"] = "Ingeniera"
print("Añadido:", persona)
Original: {'nombre': 'Ana', 'edad': 30, 'ciudad': 'Madrid'}
Modificado: {'nombre': 'Ana', 'edad': 31, 'ciudad': 'Madrid'}
Añadido: {'nombre': 'Ana', 'edad': 31, 'ciudad': 'Madrid', 'profesion': 'Ingeniera'}

Eliminar Elementos y Verificar Existencia#

  • .pop(clave): Elimina el par clave-valor y devuelve el valor. (Similar a listas, pero debes pasarle la clave).

  • clave in diccionario: Verifica si una clave existe en el diccionario. Devuelve True o False.

  • len(diccionario): Devuelve el número de pares (clave-valor) que tiene.

persona = {
    "nombre": ["Ana","felipe","juan jose"],
    "edad": [31,31,32],
    "ciudad": ["Madrid","Madrid","Madrid"],
    "profesion": ["Ingeniera","mecanica", "diseño"]
}

# Longitud
print("Nº de elementos:", len(persona))

# Verificar si la clave "ciudad" existe
print("¿Tiene 'ciudad'?", "ciudad" in persona)
# Verificar si la clave "email" existe
print("¿Tiene 'email'?", "email" in persona)

# Usando 'in' con un 'if'
if "nombre" in persona:
    print("La persona tiene un nombre guardado.")

# Eliminar un elemento
valor_eliminado = persona.pop("ciudad")
print(f"Se eliminó la ciudad: {valor_eliminado}")
print("Diccionario final:", persona)
Nº de elementos: 4
¿Tiene 'ciudad'? True
¿Tiene 'email'? False
La persona tiene un nombre guardado.
Se eliminó la ciudad: ['Madrid', 'Madrid', 'Madrid']
Diccionario final: {'nombre': ['Ana', 'felipe', 'juan jose'], 'edad': [31, 31, 32], 'profesion': ['Ingeniera', 'mecanica', 'diseño']}
persona['nombre'][1]
'felipe'

Recorriendo Diccionarios con Bucles for#

Hay dos formas principales de recorrer un diccionario.

  1. Recorrer solo las claves.

  2. Recorrer tanto las claves como los valores (la más común).

Para recorrer ambos, usamos el método .items().

persona = {
    "nombre": "Ana",
    "edad": 31,
    "profesion": "Ingeniera"
}

# 1. Recorrer solo las claves (comportamiento por defecto)
print("\n--- Recorriendo Claves ---")
for clave in persona:
    # 'clave' tomará el valor "nombre", luego "edad", luego "profesion"
    print(f"La clave es: {clave}")
    # Podemos usar la clave para obtener el valor
    print(f"El valor es: {persona[clave]}")

# 2. Recorrer Clave y Valor (¡La forma preferida!)
# Usamos .items() y dos variables en el bucle
print("\n--- Recorriendo Claves y Valores con .items() ---")
for clave, valor in persona.items():
    print(f"{clave}: {valor}")
--- Recorriendo Claves ---
La clave es: nombre
El valor es: Ana
La clave es: edad
El valor es: 31
La clave es: profesion
El valor es: Ingeniera

--- Recorriendo Claves y Valores con .items() ---
nombre: Ana
edad: 31
profesion: Ingeniera
Dic_portatiles_ktronix={"HP":["Victus1","Vitus2"],
                        "Asus":["TUF","ROG","VivoBook"],
                        "Lenovo":["Ideapad","Thinkpad","Yoga"],
                        "Mac":["Pro","mini","air"]}

Ejercicio 1: Adivina el Número#

Objetivo: Combinar while, input(), try/except y if/elif/else.

Crea un juego donde el programa «piensa» en un número secreto (puedes definirlo tú, ej. numero_secreto = 42). El programa debe:

  1. Pedir al usuario que adivine el número.

  2. Usar un bucle while True para que el usuario siga intentando.

  3. Usar try/except para asegurarse de que el usuario ingrese un número entero. Si no, debe mostrar un error y volver a preguntar.

  4. Si el usuario ingresa un número, el programa le da pistas:

    • Si el número es menor al secreto, imprime «¡Demasiado bajo!».

    • Si el número es mayor al secreto, imprime «¡Demasiado alto!».

    • Si acierta, imprime «¡Correcto! Adivinaste.» y usa break para terminar el bucle.

numero_secreto = 42
print("¡Juego de Adivinar! Intenta adivinar el número secreto (entre 1 y 100).")

# --- Escribe tu código aquí ---
while True:
  try:
    numero_usuario = int(input("Adivina el número: "))
    if numero_usuario < numero_secreto:
      print("¡Demasiado bajo!")
    elif numero_usuario > numero_secreto:
      print("¡Demasiado alto!")
    else:
      print("Encontraste el numero ganador, felicitaciones")
      break
  except ValueError:
    print("¡Entrada inválida! Debes ingresar un número entero (ej. 30).")
# --- Fin de tu código ---
¡Juego de Adivinar! Intenta adivinar el número secreto (entre 1 y 100).
Adivina el número: 45.2
¡Entrada inválida! Debes ingresar un número entero (ej. 30).
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
/tmp/ipython-input-1146761818.py in <cell line: 0>()
      5 while True:
      6   try:
----> 7     numero_usuario = int(input("Adivina el número: "))
      8     if numero_usuario < numero_secreto:
      9       print("¡Demasiado bajo!")

/usr/local/lib/python3.12/dist-packages/ipykernel/kernelbase.py in raw_input(self, prompt)
   1175                 "raw_input was called, but this frontend does not support input requests."
   1176             )
-> 1177         return self._input_request(
   1178             str(prompt),
   1179             self._parent_ident["shell"],

/usr/local/lib/python3.12/dist-packages/ipykernel/kernelbase.py in _input_request(self, prompt, ident, parent, password)
   1217             except KeyboardInterrupt:
   1218                 # re-raise KeyboardInterrupt, to truncate traceback
-> 1219                 raise KeyboardInterrupt("Interrupted by user") from None
   1220             except Exception:
   1221                 self.log.warning("Invalid Message:", exc_info=True)

KeyboardInterrupt: Interrupted by user

Ejercicio 2: Lista de Compras Interactiva#

Objetivo: Combinar listas, while, input() y for.

Crea un programa que permita al usuario construir una lista de compras.

  1. Crea una lista vacía llamada lista_compras.

  2. Usa un bucle while True para preguntar al usuario qué item quiere añadir.

  3. Si el usuario escribe «FIN» (en mayúsculas o minúsculas), el bucle debe terminar (break).

  4. Cualquier otra cosa que escriba se debe añadir a la lista_compras usando .append().

  5. Al final del bucle, el programa debe imprimir «Tu lista de compras es:» y luego mostrar cada item de la lista (usando un bucle for).

# 1. Crear lista vacía
lista_compras = []
print("Crea tu lista de compras. Escribe 'FIN' para terminar.")

# --- Escribe tu código aquí ---



# --- Fin de tu código ---
Crea tu lista de compras. Escribe 'FIN' para terminar.

Ejercicio 3: Función de Búsqueda en Diccionario#

Objetivo: Combinar funciones (def), diccionarios y return.

  1. Crea un diccionario llamado capitales que almacene algunos países como claves y sus capitales como valores (ej. "Colombia": "Bogotá", "Francia": "París").

  2. Crea una función llamada obtener_capital(pais) que reciba un país (string) como parámetro.

  3. Dentro de la función:

    • Debe verificar si el pais existe como clave en el diccionario capitales (usando in).

    • Si existe, la función debe return (devolver) la capital.

    • Si no existe, debe return (devolver) un string que diga: «No conozco esa capital.»

  4. Fuera de la función, pide al usuario que ingrese un país usando input().

  5. Llama a tu función obtener_capital() con el país del usuario e imprime el resultado que te devolvió.

# 1. Crear el diccionario
capitales = {
    "Colombia": "Bogotá",
    "Argentina": "Buenos Aires",
    "Francia": "París",
    "Japón": "Tokio"
}

# 2. Definir la función
    # --- Fin del código de la función ---


# 4. Pedir input al usuario

# 5. Llamar la función e imprimir el resultado

Ejercicio 4 (Desafío): Mini-Sistema de Calificaciones#

Objetivo: Combinar TODO: dict, list, def, while True, input(), try/except, for.

Crea un programa que guarda las calificaciones de varios estudiantes.

  1. Crea un diccionario vacío llamado boletin. La clave será el nombre del estudiante (string) y el valor será una lista de sus calificaciones (números).

    • Ejemplo: {"Ana": [5.0, 4.5], "Beto": [3.0, 4.0, 3.8]}

  2. Crea una función mostrar_promedio(nombre_estudiante) que reciba un nombre, busque sus calificaciones en el boletin, calcule el promedio y lo imprima. (Ayuda: sum(lista) te da la suma de una lista, y len(lista) la cantidad de items).

  3. Crea un bucle while True para el menú principal:

    • Pregunta al usuario: «1. Añadir calificación» o «2. Salir».

    • Si elige «2», usa break.

    • Si elige «1»:

      • Pide el nombre del estudiante (nombre).

      • Si el nombre no está en el boletin, créalo: boletin[nombre] = [].

      • Pide la calificación (nota) usando input().

      • Usa try/except para asegurarte de que la nota sea un float(). Si no, muestra un error.

      • Si la nota es válida, añádela a la lista del estudiante: boletin[nombre].append(nota).

      • Muestra el boletín actualizado: print(boletin).

      • Llama a la función mostrar_promedio(nombre) para ese estudiante.