4 usuarios conectados

Nombres completos a diccionario en Python

Comparte esto

 
Escribe un código Python que simule una tirada de un dado de seis caras un número específico de veces y devuelva un diccionario con la frecuencia con la que salió cada cara (1 al 6).

.


Más ejercicios




Mostrar/Ocultar ejercicio resuelto


  Solución al Ejercicio: Nombres completos a diccionario

📋 Copiar código


def agrupar_por_iniciales(lista_nombres):
  """
  Toma una lista de nombres completos (en formato "Nombre Apellido")
  y devuelve un diccionario donde las claves son las iniciales (en mayúsculas)
  y los valores son una lista de nombres completos con esas iniciales.

  Args:
    lista_nombres: Una lista de cadenas de texto representando nombres completos.

  Returns:
    Un diccionario donde las claves son las iniciales (ej., "JA") y los valores
    son listas de nombres completos que comparten esas iniciales.
    Devuelve un diccionario vacío si la lista de nombres está vacía.
  """
  iniciales_grupos = {}
  for nombre_completo in lista_nombres:
    partes = nombre_completo.split()
    if len(partes) >= 2:
      inicial_nombre = partes[0][0].upper()
      inicial_apellido = partes[1][0].upper()
      iniciales = inicial_nombre + inicial_apellido
      if iniciales in iniciales_grupos:
        iniciales_grupos[iniciales].append(nombre_completo)
      else:
        iniciales_grupos[iniciales] = [nombre_completo]
    elif len(partes) == 1:
      inicial = partes[0][0].upper()
      if inicial in iniciales_grupos:
        iniciales_grupos[inicial].append(nombre_completo)
      else:
        iniciales_grupos[inicial] = [nombre_completo]
    # Ignoramos nombres con menos de una parte
  return iniciales_grupos

# Ejemplo de uso
nombres = [
    "Juan Alberto",
    "María Pérez",
    "Javier Andrés",
    "Laura Sánchez",
    "Pedro García",
    "Juana Aznar",
    "Carlos López",
    "Ana Martínez",
    "Isabel Ruiz",
    "Irene Gómez",
    "Lucas Vargas"
]

grupos_por_inicial = agrupar_por_iniciales(nombres)
print(f"Lista de nombres completos: {nombres}")
print(f"Agrupados por iniciales: {grupos_por_inicial}")

otros_nombres = ["Eva", "David"]
otros_grupos = agrupar_por_iniciales(otros_nombres)
print(f"\nOtra lista de nombres: {otros_nombres}")
print(f"Agrupados por iniciales: {otros_grupos}")

nombres_incompletos = ["NombreUnico"]
grupos_incompletos = agrupar_por_iniciales(nombres_incompletos)
print(f"\nLista de nombres incompletos: {nombres_incompletos}")
print(f"Agrupados por iniciales: {grupos_incompletos}")


Explicación del Código:

  1. def agrupar_por_iniciales(lista_nombres)::

    • Se define una función llamada agrupar_por_iniciales que toma una lista de cadenas de texto (lista_nombres) como argumento, donde cada cadena representa un nombre completo.
  2. """Docstring...""":

    • La cadena de documentación explica la función, su argumento y lo que devuelve.
  3. iniciales_grupos = {}:

    • Se inicializa un diccionario vacío llamado iniciales_grupos. Este diccionario se utilizará para almacenar las iniciales como claves y las listas de nombres completos correspondientes como valores.
  4. for nombre_completo in lista_nombres::

    • Se inicia un bucle for para iterar sobre cada nombre_completo en la lista_nombres.
  5. partes = nombre_completo.split():

    • Se divide el nombre_completo en una lista de palabras utilizando el espacio como separador. Esto debería dar como resultado una lista con el nombre y el apellido (y potencialmente nombres o apellidos compuestos).
  6. if len(partes) >= 2::

    • Se verifica si la lista partes tiene al menos dos elementos (nombre y apellido).
    • inicial_nombre = partes[0][0].upper(): Se toma la primera letra del primer nombre (partes[0]), se convierte a mayúsculas y se almacena en inicial_nombre.
    • inicial_apellido = partes[1][0].upper(): Se toma la primera letra del primer apellido (partes[1]), se convierte a mayúsculas y se almacena en inicial_apellido.
    • iniciales = inicial_nombre + inicial_apellido: Se concatenan las iniciales del nombre y el apellido para formar la clave del diccionario.
    • Se verifica si la clave iniciales ya existe en el diccionario iniciales_grupos:
      • Si existe (if iniciales in iniciales_grupos:), se añade el nombre_completo a la lista existente asociada a esas iniciales.
      • Si no existe (else:), se crea una nueva entrada en el diccionario con las iniciales como clave y una nueva lista que contiene el nombre_completo como valor.
  7. elif len(partes) == 1::

    • Se maneja el caso donde solo hay una parte en el nombre (por ejemplo, un nombre único). Se toma la primera letra, se convierte a mayúsculas y se agrega al diccionario de manera similar.
  8. # Ignoramos nombres con menos de una parte:

    • Se comenta que los nombres con menos de una parte (cadenas vacías o similares) se ignoran.
  9. return iniciales_grupos:

    • Después de procesar todos los nombres de la lista, la función devuelve el diccionario iniciales_grupos.

     

  10. Ejemplo de uso:

    • Se definen varias listas de nombres completos (nombres, otros_nombres, nombres_incompletos).
    • Se llama a la función agrupar_por_iniciales con cada lista y los resultados se imprimen, mostrando cómo se agrupan los nombres según sus iniciales. El ejemplo incluye nombres con nombre y apellido, nombres únicos y un caso de nombre incompleto (que se ignora según la lógica del código).