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. DevuelveTrueoFalse.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.
Recorrer solo las claves.
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:
Pedir al usuario que adivine el número.
Usar un bucle
while Truepara que el usuario siga intentando.Usar
try/exceptpara asegurarse de que el usuario ingrese un número entero. Si no, debe mostrar un error y volver a preguntar.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
breakpara 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.
Crea una lista vacía llamada
lista_compras.Usa un bucle
while Truepara preguntar al usuario qué item quiere añadir.Si el usuario escribe «FIN» (en mayúsculas o minúsculas), el bucle debe terminar (
break).Cualquier otra cosa que escriba se debe añadir a la
lista_comprasusando.append().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.
Crea un diccionario llamado
capitalesque almacene algunos países como claves y sus capitales como valores (ej."Colombia": "Bogotá","Francia": "París").Crea una función llamada
obtener_capital(pais)que reciba un país (string) como parámetro.Dentro de la función:
Debe verificar si el
paisexiste como clave en el diccionariocapitales(usandoin).Si existe, la función debe
return(devolver) la capital.Si no existe, debe
return(devolver) un string que diga: «No conozco esa capital.»
Fuera de la función, pide al usuario que ingrese un país usando
input().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.
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]}
Crea una función
mostrar_promedio(nombre_estudiante)que reciba un nombre, busque sus calificaciones en elboletin, calcule el promedio y lo imprima. (Ayuda:sum(lista)te da la suma de una lista, ylen(lista)la cantidad de items).Crea un bucle
while Truepara 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
nombreno está en elboletin, créalo:boletin[nombre] = [].Pide la calificación (
nota) usandoinput().Usa
try/exceptpara asegurarte de que lanotasea unfloat(). 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.