Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Contar letras de una palabra
#1
Hola 

Perdón por pregunta muy básicas. Si me piden de una lista que cuente el número de palabras y luego que de aquellas que está presente más de dos veces contar el número de letras que aparecen en cada palabra y devolver los valores en un diccionario con la letra en la key y la cuenta en el value.

Gracias
Responder
#2
Hola, bienvenido.

¿Dónde tenés el problema en particular con ese ejercicio?

Saludos
Responder
#3
(16-11-2020, 03:13 PM)Francisco escribió: Hola, bienvenido.

¿Dónde tenés el problema en particular con ese ejercicio?

Saludos

Creo que la segunda parte está mal. Adjunto el código.


Archivos adjuntos Miniatura(s)
   
Responder
#4
Hola. Si este es tu código:

  1. def parte_b(palabras):
  2. dic = {}
  3. for palabra in palabras:
  4. count = 0
  5. for letra in palabra:
  6. if letra == letra:
  7. dic[letra] = 0
  8. count += 1
  9. dic[letra] = count
  10. 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í:

  1. def parte_b(palabras):
  2. dic_palabras = {}
  3. for palabra in palabras:
  4. dic_letras = {}
  5. for letra in palabra:
  6. count = 0
  7. for letra2 in palabra:
  8. if letra == letra2:
  9. count += 1
  10. dic_letras[letra] = count
  11. dic_palabras[palabra] = dic_letras
  12. return dic_palabras
  13.  
  14. # {'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}}
  15. print(parte_b(["solo", "lazo", "soca"]))


Se puede simplificar usando count(), que cuenta la cantidad de letras en una palabra:

  1. def parte_b(palabras):
  2. dic_palabras = {}
  3. for palabra in palabras:
  4. dic_letras = {}
  5. for letra in palabra:
  6. if letra in dic_letras:
  7. continue
  8. dic_letras[letra] = palabra.count(letra)
  9. dic_palabras[palabra] = dic_letras
  10. return dic_palabras


Hay una forma todavía más simplificada usando collections.Counter:

  1. from collections import Counter
  2.  
  3. def parte_b(palabras):
  4. return {palabra: dict(Counter(palabra)) for palabra in palabras}



Saludos
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)