1

Como crear un menú para agregar, modificar, listar, buscar y quitar elementos de un diccionario dentro de otro diccionario en Python

Como muchos que pueden estar leyendo esto, soy alguien que quiere cambiar su calidad de vida y la de su familia a través del aprendizaje, gracias a esto conocí a Platzi y al mundo de la programación.

Quiero compartir como realizar un menú de opciones con un ciclo while, dicho menú me permitirá agregar, modificar, eliminar y verificar elementos dentro de un diccionario, soy consciente de que existen n formas de llegar a una misma solución, pero acá va mi aporte.

Inicialmente, se crea el diccionario que almacenará los datos, en este caso será productos de un supermercado, los cuales tendrán un nombre principal y se le asociará un costo y una cantidad.

diccionario = {
    "Manzanas": {"Precio": 2000, "Cantidad": 6},
    "Huevos": {"Precio": 600, "Cantidad": 15},
    "Lavaplatos": {"Precio": 5100, "Cantidad": 1},
}

Posteriormente, se crea el ciclo while, podemos condicionarlo a una variable True; sin embargo, en este caso lo realizaré con un ciclo “Infinito” condicionándolo al valor booleano True, más adelante veremos como salir de este ciclo.

Dentro de dicho ciclo se genera inicialmente el menú de opciones para el usuario y la variable input que recibirá la opción ingresada por el usuario, de la siguiente manera:

while True:
    print("Acá encontraras las opciones:")
    print("")
    print("(1) Ingresar datos.")
    print("(2) Modificar datos.")
    print("(3) Eliminar datos.")
    print("(4) Listar datos.")
    print("(5) Buscar datos.")
    print("(6) Salir.")
    print("")
    opcion = input("Acá el usuario indicará que opcion desea ejecutar (1, 2, etc): ")

Siguiendo con el proceso veo dos caminos posibles, interactuar con la opción brindada por el usuario por medio de condicionales if o crear un match case, en este caso decidí usar los condicionales if, en el cual según la opción del usuario realizara la porción de código correspondiente, recordar que todo debe estar correctamente endentado dentro del ciclo while.

if opcion == "1":
    # Codigo para Agregar elementospasselif opcion == "2":
    # Codigo para Modificar elementospasselif opcion == "3":
    # Codigo para Eliminar elementospasselif opcion == "4":
	# Codigo para Listar elementospasselif opcion == "5":
    # Codigo para Buscar elementospasselif opcion == "6":
    print("Gracias por usar nuestro sistema! VUELVA PRONTO!")
    break# para detener el cicloelse:
    print("La opcion no es valida, intente nuevamente") # Si el usuario ingresa una opcion no valida el programa seguira ejecutando
  1. Agregar elementos:
    Para agregar elementos a un diccionario se coloca el código dentro del if correspondiente a la opción “1”, he decidido en este caso preguntarle al usuario nombre del producto, precio y cantidad por medio de un input, además de agregar los elementos al diccionario con el orden preestablecido con la sintaxis nombreDiccionario[Clave] = Valor, de la siguiente manera:
if opcion == "1":
        nombre, precio, cantidad = (
            input("Nombre: "),
            float(input("Precio: ")),
            int(input("Cantidad: ")),
        )
        
        diccionario[nombre] = {"Precio" : precio, "Cantidad" : cantidad}

Se debe tener en cuenta que el input por defecto recibe datos en formato string o cadena de texto, por lo cual se hace indispensable castear los datos que sea necesario hacerlo, además acá se muestra como Python me permite crear diferentes variables en una sola instrucción por medio de n variables separadas por comas (,) igual al mismo número n de valores separados por comas (,). Al finalizar volverá al menú debido al ciclo anterior.

  1. Modificar elementos
    Python nos permite modificar elementos con la misma sintaxis con la que agregamos nuevos valores, la única diferencia está en que para agregar tendrá un clave o llave no existente y para modificar se deberá colocar una llave o clave existente, para modificar el valor de un diccionario dentro de otro se deberá acceder por medio de la llave externa e interna concatenada de la siguiente manera:
nombreDiccionario[clavePrincipal][claveInterna] = datoNuevoOModificar

Como continuación del ejercicio planteado se tabula dentro del elif correspondiente a la opción 2, se modificara la cantidad por medio de un input donde el usuario ingresa el nombre del producto que desea modificar, por medio de un if y el método .keys() se valida si este producto existe, si existe le permite al usuario modificar la cantidad y si no le indicara que el producto no está en el diccionario, a continuación vemos el código:

elif opcion == "2":
        producto = input("Ingrese producto a modificar: ")
        
        if producto in diccionario.keys():
            cantidad = input("Ingrese nueva cantidad: ")
            diccionario[producto]["Cantidad"] = cantidad
        else:
            print(f"{producto} no se encuentra en el diccionario")

Recordemos que el método .keys() arroja las llaves o claves de un diccionario, además el format (f" "), permite imprimir variables de forma dinámica dentro de un string o cadena de texto.

  1. Eliminar elementos.
    El tercer paso corresponde a eliminar elementos de un diccionario, para esto existen varios métodos, en este caso opte por usar el método del, el cual permite borrar un elemento por medio de su llave o clave, dentro del _elif _correspondiente a la opción de eliminar elementos se reutiliza el condicional de verificación de la existencia del producto y en caso de existir lo eliminara de la siguiente manera:
elif opcion == "3":
        producto = input("Ingrese producto a eliminar: ")
        
        if producto in diccionario.keys():
            del diccionario[producto]
            
        else:
            print(f"{producto} no se encuentra en el diccionario")
  1. Listar producto
    La siguiente opción se encargará de listar todos los productos que hay dentro del diccionario dentro del _elif _correspondiente accederemos al nombre, precio y cantidad, para esto haremos uso del ciclo for, el format y nuevamente el método .keys():
elif opcion == "4":
        for producto in diccionario.keys():
            print(f"{producto} cuesta {diccionario[producto]["Precio"]} y hay {diccionario[producto]["Cantidad"]} unidades.")

El ciclo _for _junto con el método .keys() recorrerá uno a uno cada producto y dentro del format llamo el valor correspondiente a cada subclave.

  1. Buscar elemento.
    Si deseo buscar un elemento se coloca en el elif correspondiente, un condicional con el metodo .keys() y un format para mostrar la información completa como ya hemos hecho anteriormente:
elif opcion == "5":
        producto = input("Ingrese producto a buscar: ")
        if producto in diccionario.keys():
            print(f"{producto} se encuentra en el inventario, cuesta {diccionario[producto]["Precio"]} y hay {diccionario[producto]["Cantidad"]} unidades.")

Por último mencioné que explicaría como salir de un ciclo infinito, para esto si el usuario ingresa la opción “6” accionará un break, el cual se encarga de salir del ciclo, además el _else _ en los condicionales principales me asegura que el usuario ingrese una opción válida.

El código completo queda de la siguiente manera:

diccionario = {
    "Manzanas": {"Precio": 2000, "Cantidad": 6},
    "Huevos": {"Precio": 600, "Cantidad": 15},
    "Lavaplatos": {"Precio": 5100, "Cantidad": 1},
}

whileTrue:
    print("Acá encontraras las opciones:")
    print("")
    print("(1) Ingresar datos.")
    print("(2) Modificar datos.")
    print("(3) Eliminar datos.")
    print("(4) Listar datos.")
    print("(5) Buscar datos.")
    print("(6) Salir.")
    print("")
    opcion = input("Acá el usuario indicará que opcion desea ejecutar (1, 2, etc): ")

    if opcion == "1":
        nombre, precio, cantidad = (
            input("Nombre: "),
            float(input("Precio: ")),
            int(input("Cantidad: ")),
        )
        
        diccionario[nombre] = {"Precio" : precio, "Cantidad" : cantidad}
        
    elif opcion == "2":
        producto = input("Ingrese producto a modificar: ")
        
        if producto in diccionario.keys():
            cantidad = input("Ingrese nueva cantidad: ")
            diccionario[producto]["Cantidad"] = cantidad
        else:
            print(f"{producto} no se encuentra en el diccionario")
    elif opcion == "3":
        producto = input("Ingrese producto a eliminar: ")
        
        if producto in diccionario.keys():
            del diccionario[producto]
            
        else:
            print(f"{producto} no se encuentra en el diccionario")
    elif opcion == "4":
        for producto in diccionario.keys():
            print(f"{producto} cuesta {diccionario[producto]["Precio"]} y hay {diccionario[producto]["Cantidad"]} unidades.")
    elif opcion == "5":
        producto = input("Ingrese producto a buscar: ")
        if producto in diccionario.keys():
            print(f"{producto} se encuentra en el inventario, cuesta {diccionario[producto]["Precio"]} y hay {diccionario[producto]["Cantidad"]} unidades.")
    elif opcion == "6":
        print("Gracias por usar nuestro sistema! VUELVA PRONTO!")
        break# para detener el cicloelse:
        print("La opcion no es valida, intente nuevamente")

Muchas gracias por tomarse el tiempo en leer este pequeño aporte, muchos éxitos en su camino de aprendizaje y en su presente y futuro laboral.

Escribe tu comentario
+ 2