.
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:
-
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.
-
"""Docstring..."""
:
- La cadena de documentación explica la
función, su argumento y lo que devuelve.
-
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.
-
for nombre_completo in
lista_nombres:
:
- Se inicia un bucle
for
para
iterar sobre cada nombre_completo
en la lista_nombres
.
-
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).
-
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.
-
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.
-
# Ignoramos nombres con menos
de una parte
:
- Se comenta que los nombres con menos de
una parte (cadenas vacías o similares) se ignoran.
-
return iniciales_grupos
:
- Después de procesar todos los nombres
de la lista, la función devuelve el diccionario
iniciales_grupos
.
-
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).