Ejercicio 06 — Agrupa palabras de una frase por su primera letra y muestralas…
Dificultad: amarillo · Módulo 07 (Diccionarios y sets)
Enunciado
Agrupa palabras de una frase por su primera letra y muestralas ordenadas
Cómo se resuelve
Agrupar palabras por su primera letra enseña el diccionario como “cajón de listas”: cada clave (la inicial) guarda una lista de todas las palabras que empiezan por ella.
frase.lower().strip()yfrase.split()— normalizamos y partimos la frase en palabras, igual que en los ejercicios anteriores.if not palabra: continue— si aparece una cadena vacía (por dobles espacios), la saltamos para no intentar leer su primera letra y fallar.inicial = palabra[0]— cogemos el primer carácter de la palabra, que será la clave del grupo.if inicial not in grupos: grupos[inicial] = []— la primera vez que aparece una inicial, todavía no tiene lista asociada, así que le creamos una lista vacía. Sin este paso, el siguienteappendfallaría porque la clave no existiría.grupos[inicial].append(palabra)— añadimos la palabra a la lista de su inicial. Como el acceso a la clave del dict es O(1) por hashing, agrupar todas las palabras es una única pasada eficiente.for letra in sorted(grupos):ysorted(grupos[letra])— ordenamos las iniciales y, dentro de cada grupo, las palabras, para una salida limpia y predecible.
Trampa habitual: hacer directamente grupos[inicial].append(palabra) sin inicializar la lista antes. La primera palabra de cada inicial encuentra una clave que aún no existe y el .append lanza KeyError. La solución idiomática es o bien el patrón if inicial not in grupos de aquí, o usar grupos.setdefault(inicial, []).append(palabra), o un defaultdict(list) de collections, que crean la lista automáticamente.
Para practicar — cópialo y complétalo
Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.
# Curso de Python — Modulo 07: Diccionarios y Sets
# Ejercicio 06 — PRACTICA (rellena los TODO)
# Enunciado: Agrupa palabras de una frase por su primera letra y muestralas ordenadas
# Dificultad: amarillo
# Ejecutar: python3 ej06_practica.py
# TODO: pide una frase al usuario, conviertela a minusculas y elimina espacios extremos
frase = None
# TODO: divide la frase en palabras con .split()
palabras = None
# TODO: crea un dict vacio llamado "grupos"
grupos = None
# TODO: recorre cada palabra en "palabras" con un bucle for
for palabra in (palabras or []):
# TODO: ignora palabras vacias (if not palabra: continue)
# TODO: extrae la inicial (primera letra) de la palabra
inicial = None
# TODO: si la inicial NO esta en grupos, crea una lista vacia para esa clave
# TODO: agrega la palabra a grupos[inicial]
pass
# TODO: imprime el titulo "Palabras agrupadas por inicial:"
# TODO: recorre las letras de grupos en orden SORTED
# para cada letra, imprime sus palabras tambien ordenadas con sorted()
# formato: " {letra}: {', '.join(palabras_ordenadas)}"Solución — cópiala y ejecútala
# Curso de Python — Modulo 07: Diccionarios y Sets
# Ejercicio 06 — MODELO (resuelto)
# Enunciado: Agrupa palabras de una frase por su primera letra y muestralas ordenadas
# Dificultad: amarillo
# Ejecutar: python3 ej06_modelo.py
frase = input("Introduce una frase: ").lower().strip()
palabras = frase.split()
grupos = {}
for palabra in palabras:
if not palabra: # ignorar cadenas vacias por si hay dobles espacios
continue
inicial = palabra[0]
if inicial not in grupos:
grupos[inicial] = []
grupos[inicial].append(palabra)
print("\nPalabras agrupadas por inicial:")
for letra in sorted(grupos):
palabras_ordenadas = sorted(grupos[letra])
print(f" {letra}: {', '.join(palabras_ordenadas)}")Cómo usarlo
Pega el código en un fichero y ejecútalo con tu toolchain habitual (o el botón de Ejecutar de tu editor). Antes de mirar la solución, intenta completar tú el esqueleto: es la mejor forma de aprender.