PROGRAMACIÓN EN PYTHON – CLASE 09

(Creado por el analista de sistemas y docente Leonel Iván Saafigueroa)


DICCIONARIOS

Uso y métodos esenciales.


Los diccionarios en Python son estructuras de datos que almacenan información en pares clave-valor. Imaginá una agenda telefónica: cada nombre (clave) tiene asociado un número de teléfono (valor). A diferencia de las listas, que acceden a los elementos por su posición (índice numérico), los diccionarios utilizan claves únicas para acceder a sus valores. Las claves pueden ser de varios tipos inmutables (cadenas, números, tuplas), mientras que los valores pueden ser de cualquier tipo.



Declaración:

Se declaran usando llaves {} y se separan las claves y valores con dos puntos : .

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
mi_diccionario = {
"nombre": "Juan", # Clave: "nombre", Valor: "Juan"
"edad": 30, # Clave: "edad", Valor: 30
"ciudad": "Buenos Aires" # Clave: "ciudad", Valor: "Buenos Aires"
}
mi_diccionario = { "nombre": "Juan", # Clave: "nombre", Valor: "Juan" "edad": 30, # Clave: "edad", Valor: 30 "ciudad": "Buenos Aires" # Clave: "ciudad", Valor: "Buenos Aires" }
mi_diccionario = {
    "nombre": "Juan",           # Clave: "nombre", Valor: "Juan"
    "edad": 30,                 # Clave: "edad", Valor: 30
    "ciudad": "Buenos Aires"    # Clave: "ciudad", Valor: "Buenos Aires"
}

Acceso a los valores:

Se accede a un valor usando su clave entre corchetes [].

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
mi_diccionario = {
"nombre": "Juan",
"edad": 30,
"ciudad": "Buenos Aires"
}
print(mi_diccionario["nombre"])
print(mi_diccionario["edad"])
print(mi_diccionario["ciudad"])
mi_diccionario = { "nombre": "Juan", "edad": 30, "ciudad": "Buenos Aires" } print(mi_diccionario["nombre"]) print(mi_diccionario["edad"]) print(mi_diccionario["ciudad"])
mi_diccionario = {
    "nombre": "Juan",
    "edad": 30,
    "ciudad": "Buenos Aires"
}

print(mi_diccionario["nombre"])
print(mi_diccionario["edad"])
print(mi_diccionario["ciudad"])
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Juan
30
Buenos Aires
Juan 30 Buenos Aires
Juan
30
Buenos Aires


Si intentas acceder a una clave que no existe, obtendrás un error KeyError.

Es mejor usar el método get() para manejar este caso.

Si la clave no existe devuelve un valor por defecto, en este caso pais devuelve 0.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
mi_diccionario = {
"nombre": "Juan",
"edad": 30,
"ciudad": "Buenos Aires"
}
print(mi_diccionario.get("nombre", 0))
print(mi_diccionario.get("edad", 0))
print(mi_diccionario.get("ciudad", 0))
print(mi_diccionario.get("pais", 0))
mi_diccionario = { "nombre": "Juan", "edad": 30, "ciudad": "Buenos Aires" } print(mi_diccionario.get("nombre", 0)) print(mi_diccionario.get("edad", 0)) print(mi_diccionario.get("ciudad", 0)) print(mi_diccionario.get("pais", 0))
mi_diccionario = {
    "nombre": "Juan",
    "edad": 30,
    "ciudad": "Buenos Aires"
}

print(mi_diccionario.get("nombre", 0))
print(mi_diccionario.get("edad", 0))
print(mi_diccionario.get("ciudad", 0))
print(mi_diccionario.get("pais", 0))
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Juan
30
Buenos Aires
0
Juan 30 Buenos Aires 0
Juan
30
Buenos Aires
0


Python permite agregar o actualizar los datos almacenados en un diccionario. Con la sintaxis del ejemplo, se modifica el valor asociado a una clave existente, o se crea una clave si no existe previamente.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
mi_diccionario = {
"nombre": "Juan",
"edad": 30,
"ciudad": "Buenos Aires"
}
# Agrega la clave "pais" con valor "España"
mi_diccionario["pais"] = "Argentina"
# Modifica el valor de la clave "edad"
mi_diccionario["edad"] = 31
print(mi_diccionario)
mi_diccionario = { "nombre": "Juan", "edad": 30, "ciudad": "Buenos Aires" } # Agrega la clave "pais" con valor "España" mi_diccionario["pais"] = "Argentina" # Modifica el valor de la clave "edad" mi_diccionario["edad"] = 31 print(mi_diccionario)
mi_diccionario = {
    "nombre": "Juan",
    "edad": 30,
    "ciudad": "Buenos Aires"
}

# Agrega la clave "pais" con valor "España"
mi_diccionario["pais"] = "Argentina"

# Modifica el valor de la clave "edad"
mi_diccionario["edad"] = 31

print(mi_diccionario)
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
{'nombre': 'Juan', 'edad': 31, 'ciudad': 'Buenos Aires', 'pais': 'Argentina'}
{'nombre': 'Juan', 'edad': 31, 'ciudad': 'Buenos Aires', 'pais': 'Argentina'}
{'nombre': 'Juan', 'edad': 31, 'ciudad': 'Buenos Aires', 'pais': 'Argentina'}


Se pueden eliminar elementos usando del.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
mi_diccionario = {
"nombre": "Juan",
"edad": 30,
"ciudad": "Buenos Aires"
}
del mi_diccionario["ciudad"]
print(mi_diccionario)
mi_diccionario = { "nombre": "Juan", "edad": 30, "ciudad": "Buenos Aires" } del mi_diccionario["ciudad"] print(mi_diccionario)
mi_diccionario = {
    "nombre": "Juan",
    "edad": 30,
    "ciudad": "Buenos Aires"
}

del mi_diccionario["ciudad"]

print(mi_diccionario)
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
{'nombre': 'Juan', 'edad': 30}
{'nombre': 'Juan', 'edad': 30}
{'nombre': 'Juan', 'edad': 30}

pop() nos permite eliminar un elemento específico del diccionario.
Al usarlo, además de eliminar el elemento, podemos capturar el valor eliminado.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
productos = {
"Manzanas": 50,
"Peras": 30,
"Bananas": 40
}
cantidad_bananas = productos.pop("Bananas", "No hay bananas")
print("Cantidad de bananas eliminada:", cantidad_bananas)
print(productos)
productos = { "Manzanas": 50, "Peras": 30, "Bananas": 40 } cantidad_bananas = productos.pop("Bananas", "No hay bananas") print("Cantidad de bananas eliminada:", cantidad_bananas) print(productos)
productos = {
   "Manzanas": 50,
   "Peras": 30,
   "Bananas": 40
}

cantidad_bananas = productos.pop("Bananas", "No hay bananas")
print("Cantidad de bananas eliminada:", cantidad_bananas)
print(productos)
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Cantidad de bananas eliminada: 40
{'Manzanas': 50, 'Peras': 30}
Cantidad de bananas eliminada: 40 {'Manzanas': 50, 'Peras': 30}
Cantidad de bananas eliminada: 40
{'Manzanas': 50, 'Peras': 30}


Hay varias maneras de recorrer un diccionario en Python, dependiendo de qué parte del diccionario queremos acceder (claves, valores o ambos). Aquí vemos ejemplos de cada caso.

Ejemplo con .items()

(recorriendo claves y valores)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
mi_diccionario = {"nombre": "Ana", "edad": 30, "ciudad": "Bogotá"}
for clave, valor in mi_diccionario.items():
print(f"Clave: {clave}, Valor: {valor}")
mi_diccionario = {"nombre": "Ana", "edad": 30, "ciudad": "Bogotá"} for clave, valor in mi_diccionario.items(): print(f"Clave: {clave}, Valor: {valor}")
mi_diccionario = {"nombre": "Ana", "edad": 30, "ciudad": "Bogotá"}

for clave, valor in mi_diccionario.items():
    print(f"Clave: {clave}, Valor: {valor}")
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Clave: nombre, Valor: Ana
Clave: edad, Valor: 30
Clave: ciudad, Valor: Bogotá
Clave: nombre, Valor: Ana Clave: edad, Valor: 30 Clave: ciudad, Valor: Bogotá
Clave: nombre, Valor: Ana
Clave: edad, Valor: 30
Clave: ciudad, Valor: Bogotá

Ejemplo con .keys()

(recorriendo claves)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
mi_diccionario = {"nombre": "Ana", "edad": 30, "ciudad": "Bogotá"}
for clave in mi_diccionario.keys():
print(f"Clave: {clave}")
mi_diccionario = {"nombre": "Ana", "edad": 30, "ciudad": "Bogotá"} for clave in mi_diccionario.keys(): print(f"Clave: {clave}")
mi_diccionario = {"nombre": "Ana", "edad": 30, "ciudad": "Bogotá"}

for clave in mi_diccionario.keys():
    print(f"Clave: {clave}")
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Clave: nombre
Clave: edad
Clave: ciudad
Clave: nombre Clave: edad Clave: ciudad
Clave: nombre
Clave: edad
Clave: ciudad

Ejemplo con .values()

(recorriendo los valores)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
mi_diccionario = {"nombre": "Ana", "edad": 30, "ciudad": "Bogotá"}
for valor in mi_diccionario.values():
print(f"Valor: {valor}")
mi_diccionario = {"nombre": "Ana", "edad": 30, "ciudad": "Bogotá"} for valor in mi_diccionario.values(): print(f"Valor: {valor}")
mi_diccionario = {"nombre": "Ana", "edad": 30, "ciudad": "Bogotá"}

for valor in mi_diccionario.values():
    print(f"Valor: {valor}")
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Valor: Ana
Valor: 30
Valor: Bogotá
Valor: Ana Valor: 30 Valor: Bogotá
Valor: Ana
Valor: 30    
Valor: Bogotá


Usando el método clear()

Este método elimina todos los elementos del diccionario, dejándolo vacío pero sin eliminarlo de la memoria.

El diccionario sigue existiendo, simplemente ya no contiene pares clave-valor.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
mi_diccionario = {"nombre": "Ana", "edad": 30, "ciudad": "Bogotá"}
print(f"Diccionario antes de clear(): {mi_diccionario}")
mi_diccionario.clear()
print(f"Diccionario después de clear(): {mi_diccionario}")
mi_diccionario = {"nombre": "Ana", "edad": 30, "ciudad": "Bogotá"} print(f"Diccionario antes de clear(): {mi_diccionario}") mi_diccionario.clear() print(f"Diccionario después de clear(): {mi_diccionario}")
mi_diccionario = {"nombre": "Ana", "edad": 30, "ciudad": "Bogotá"}
print(f"Diccionario antes de clear(): {mi_diccionario}")

mi_diccionario.clear()
print(f"Diccionario después de clear(): {mi_diccionario}")
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Diccionario antes de clear(): {'nombre': 'Ana', 'edad': 30, 'ciudad': 'Bogotá'}
Diccionario después de clear(): {}
Diccionario antes de clear(): {'nombre': 'Ana', 'edad': 30, 'ciudad': 'Bogotá'} Diccionario después de clear(): {}
Diccionario antes de clear(): {'nombre': 'Ana', 'edad': 30, 'ciudad': 'Bogotá'}
Diccionario después de clear(): {}

Usando la asignación a “None” o a un nuevo diccionario vacío

Esto sobrescribe la referencia al diccionario, eliminando la variable del espacio de nombres.

Si existen otras referencias al mismo diccionario en otra parte del código, estas referencias aún apuntarán al diccionario, pero la variable original ya no lo hará.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
mi_diccionario = {"nombre": "Ana", "edad": 30, "ciudad": "Bogotá"}
print(f"Diccionario antes de asignación: {mi_diccionario}")
mi_diccionario = None # o mi_diccionario = {}
print(f"Diccionario después de asignación: {mi_diccionario}")
mi_diccionario = {"nombre": "Ana", "edad": 30, "ciudad": "Bogotá"} print(f"Diccionario antes de asignación: {mi_diccionario}") mi_diccionario = None # o mi_diccionario = {} print(f"Diccionario después de asignación: {mi_diccionario}")
mi_diccionario = {"nombre": "Ana", "edad": 30, "ciudad": "Bogotá"}
print(f"Diccionario antes de asignación: {mi_diccionario}")

mi_diccionario = None  # o mi_diccionario = {}
print(f"Diccionario después de asignación: {mi_diccionario}")
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Diccionario antes de asignación: {'nombre': 'Ana', 'edad': 30, 'ciudad': 'Bogotá'}
Diccionario después de asignación: None
Diccionario antes de asignación: {'nombre': 'Ana', 'edad': 30, 'ciudad': 'Bogotá'} Diccionario después de asignación: None
Diccionario antes de asignación: {'nombre': 'Ana', 'edad': 30, 'ciudad': 'Bogotá'}
Diccionario después de asignación: None

TAREA PARA EL HOGAR

Crea un programa en Python que gestione el inventario de productos usando diccionarios. El programa debe:

Capturar datos: Solicitar al usuario el nombre y precio de tres productos. Validar datos (nombre no vacío, precio numérico positivo). Almacenar la información en un diccionario donde la clave es el nombre del producto y el valor es un diccionario con “precio” y “stock” (inicializado en 0).

Mostrar inventario: Presentar en pantalla un reporte del inventario actual, mostrando nombre, precio y stock de cada producto.

Consultar stock: Permitir al usuario consultar el stock de un producto. Mostrar precio y stock si existe, o un mensaje de “Producto no encontrado” si no.

Modificar datos: Permitir al usuario modificar el precio o el stock de un producto existente. Validar que el producto exista y que los nuevos datos sean válidos (precio numérico positivo, stock numérico no negativo).