Python: diccionarios para estructura de cliente

Clase 25 de 49Curso Práctico de Python: Creación de un CRUD

Resumen

Refactoriza tu CRUD de clientes en Python y pasa de una lista con nombres a diccionarios con estructura clara: name, company, email y position. Con una sola función para capturar campos, mejorarás la entrada de datos y el formateo al listar por UID. Además, verás por qué refactorizar es parte natural del trabajo en software.

¿Cómo transformar la lista de clientes con diccionarios en Python?

Usar diccionarios permite definir explícitamente qué es un cliente. En lugar de una lista de strings, se modela cada cliente con llaves y valores. Así, el código se vuelve más expresivo y fácil de mantener.

¿Qué estructura tiene cada cliente?

  • name: nombre de la persona.
  • company: organización asociada.
  • email: correo de contacto.
  • position: rol como software engineer o Data Engineer.
clients = [
    {
        'name': 'Pablo',
        'company': 'Google',
        'email': 'pablo@google.com',
        'position': 'software engineer',
    },
    {
        'name': 'Ricardo',
        'company': 'Facebook',
        'email': 'ricardo@facebook.com',
        'position': 'Data Engineer',
    },
]

¿Por qué usar diccionarios y no solo nombres?

  • Porque definen la estructura del dominio del cliente.
  • Porque facilitan el acceso por llave a cada campo.
  • Porque hacen el código más flexible para nuevas necesidades.

¿Cómo adaptar create y la captura de datos con get_client_field?

Antes, create recibía solo el nombre. Ahora, recibe el diccionario completo del cliente. Para capturar datos, se usa una función genérica que pide cada campo y no permite continuar con valores vacíos.

¿Cómo se captura cada campo con una función genérica?

  • Se refactoriza de get_client_name a get_client_field.
  • Se recibe el nombre del campo y se solicita por input.
  • Se valida con un while not field hasta tener valor.
def get_client_field(field_name):
    field = None
    while not field:
        field = input(f'What is the client {field_name}? ')
    return field

¿Cómo se envía el objeto cliente a create?

  • Se construye el diccionario con los cuatro campos.
  • Se añade a la lista con append.
client = {
    'name': get_client_field('name'),
    'company': get_client_field('company'),
    'email': get_client_field('email'),
    'position': get_client_field('position'),
}
clients.append(client)
  • Puedes mantener temporalmente get_client_name mientras terminas de migrar otros comandos.

¿Qué pasa si el usuario no ingresa datos?

  • El ciclo while asegura que no se acepta un campo vacío.
  • La interacción es consistente para name, company, email y position.

¿Cómo listar clientes con formato y acceder por índice (UID)?

El listado ahora muestra un UID (el índice en la lista) y los campos clave del cliente. Así el resultado es legible y útil para futuras operaciones.

¿Cómo imprimir UID, name, company, email y position?

  • Se recorre con enumerate para obtener el índice.
  • Se usa un formateo de string para la salida clara.
for idx, client in enumerate(clients):
    print('{uid} | {name} | {company} | {email} | {position}'.format(
        uid=idx,
        name=client['name'],
        company=client['company'],
        email=client['email'],
        position=client['position'],
    ))

¿Qué se recomienda para update, delete y search?

  • Usar el índice (UID) para identificar registros.
  • Crear funciones auxiliares para evitar repetición.
  • Recordar que hay múltiples soluciones válidas: la “mejor” depende de tiempo y memoria.

¿Cómo se probó la creación de un cliente?

  • Se ejecutó el programa: python main.py.
  • Se ingresó name “David”, company “Platze”, email “david@david.com” y position “teacher”.
  • El cliente se añadió correctamente a la lista.

¿Te animas a completar update, delete y search usando el UID y funciones auxiliares? Comparte tus dudas o tu solución en los comentarios.