Hola. Si este es tu código:
Código:
def parte_b(palabras):
dic = {}
for palabra in palabras:
count = 0
for letra in palabra:
if letra == letra:
dic[letra] = 0
count += 1
dic[letra] = count
return dic
Tené en cuenta lo siguente. Primero, estás creando un solo diccionario, de modo que se van a contar en el mismo diccionario indistintamente las letras de cualquiera de las palabras pasadas como argumento. Segundo, estás creando un contador por cada palabra (fijate que lo tenés en el bucle "for palabra in palabras"), pero debería ser por cada letra ("for letra in palabra"). Tercero, la condición "letra == letra" es tautológica (o sea, siempre da verdadero, A == A, 1 == 1, cualquier cosa == cualquier cosa).
Haciendo esas correcciones, quedaría así:
Código:
def parte_b(palabras):
dic_palabras = {}
for palabra in palabras:
dic_letras = {}
for letra in palabra:
count = 0
for letra2 in palabra:
if letra == letra2:
count += 1
dic_letras[letra] = count
dic_palabras[palabra] = dic_letras
return dic_palabras
# {'solo': {'s': 1, 'o': 2, 'l': 1}, 'lazo': {'l': 1, 'a': 1, 'z': 1, 'o': 1}, 'soca': {'s': 1, 'o': 1, 'c': 1, 'a': 1}}
print(parte_b(["solo", "lazo", "soca"]))
Se puede simplificar usando count(), que cuenta la cantidad de letras en una palabra:
Código:
def parte_b(palabras):
dic_palabras = {}
for palabra in palabras:
dic_letras = {}
for letra in palabra:
if letra in dic_letras:
continue
dic_letras[letra] = palabra.count(letra)
dic_palabras[palabra] = dic_letras
return dic_palabras
Hay una forma todavía más simplificada usando
collections.Counter:
Código:
from collections import Counter
def parte_b(palabras):
return {palabra: dict(Counter(palabra)) for palabra in palabras}
Saludos