Python - Cadena más larga que contiene una letra (usando diccionarios)

 
Vista:
Imágen de perfil de Jorge Alberto
Val: 137
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Cadena más larga que contiene una letra (usando diccionarios)

Publicado por Jorge Alberto (48 intervenciones) el 24/12/2020 06:47:32
Hola. ¿Cómo andan? Tengo un problema con un ejercicio.

Escribir una función que reciba un texto y para cada caracter presente en el texto devuelva la cadena más larga en la que se encuentra ese caracter. (En el foro encontré el mismo tema abierto hace unos dos años, pero no fue resuelto).

Lo que hice hasta ahora es:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def cadena_mas_larga(cadena_larga):
 
  cadena_larga_2 = cadena_larga.split()
 
  lista,lista_longitudes = [],[]
  diccionario = {}
 
  for c in cadena_larga:
    if c in lista:  continue
    for i in range(len(cadena_larga_2)):
      if c in cadena_larga_2[i]:
        lista.append(cadena_larga_2[i])
        lista_longitudes.append(len(cadena_larga_2[i]))
 
    diccionario[c]=lista
    lista,lista_longitudes = [],[]
 
  print(diccionario)

Con esto, puedo crear diccionarios donde las claves son todas las letras de la cadena y los valores son las palabras en donde figuran, pero de acá no sé cómo dejar únicamente la de mayor longitud.

Probé calculando la máxima longitud de cada valor en el diccionario (para cada clave por separado), pero no logro terminar de armarlo bien.

Alguna idea?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de algoritmo
Val: 819
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Cadena más larga que contiene una letra (usando diccionarios)

Publicado por algoritmo (245 intervenciones) el 24/12/2020 16:12:42
Hola

Espero que te sirva. Feliz Navidad

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def cadena_mas_larga(cadena_larga):
  cadena_larga = cadena_larga.lower()
  cadena_larga_2 = cadena_larga.split()
 
  lista,lista_longitudes = [],[]
  diccionario = {}
 
  for c in cadena_larga:
    maximo = 0
    if c in lista:  continue
    for i in range(len(cadena_larga_2)):
      if c in cadena_larga_2[i]:
        lista.append((cadena_larga_2[i]))
        maximo = max(maximo, len(cadena_larga_2[i]))
 
    diccionario[c]=(lista, maximo)
    lista = []
 
  for letra in diccionario.keys():
    print(letra, diccionario[letra][0], diccionario[letra][1])
 
texto = 'En un lugar de la mancha de cuyo nombre no quiero acordarme'
cadena_mas_larga(texto)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge Alberto
Val: 137
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Cadena más larga que contiene una letra (usando diccionarios)

Publicado por Jorge Alberto (48 intervenciones) el 24/12/2020 19:33:16
Hola. ¿Cómo estas? Muchas gracias por la respuesta.

Casi... lo que necesito es que me devuelva la letra y la palabra más larga. En la frase de don Quijote, sería:

1
2
3
4
{'e': ['acordarme']
'n': ['mancha','nombre']
 
etc.}



En otras palabras, necesito que devuelva la letra y la palabra más larga en la que aparece, y no la letra con todas las palabras en las que aparece más cuán larga es la máxima palabra.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de algoritmo
Val: 819
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Cadena más larga que contiene una letra (usando diccionarios)

Publicado por algoritmo (245 intervenciones) el 25/12/2020 11:18:33
a ver ahora

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def cadena_mas_larga(cadena_larga):
    cadena_larga = cadena_larga.lower()
    cadena_larga_2 = cadena_larga.split()
 
    lista,lista_longitudes = [],[]
    diccionario = {}
 
    for c in cadena_larga:
        if c == ' ':
            continue
        maximo = 0
        if c in lista:  continue
        for i in range(len(cadena_larga_2)):
            if c in cadena_larga_2[i]:
              lista.append((cadena_larga_2[i]))
              maximo = max(maximo, len(cadena_larga_2[i]))
        diccionario[c]=(lista, maximo)
        lista = []
 
    for letra in diccionario.keys():
        lista = []
        for item in diccionario[letra][0]:
            if len(item) == diccionario[letra][1]:
                lista.append(item)
        diccionario[letra] = lista
 
    print(diccionario)
 
texto = 'En un lugar de la mancha de cuyo nombre no quiero acordarme'
cadena_mas_larga(texto)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jorge Alberto
Val: 137
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Cadena más larga que contiene una letra (usando diccionarios)

Publicado por Jorge Alberto (48 intervenciones) el 25/12/2020 22:28:40
Ahora funciona perfecto. Más tarde me fijo bien el código porque ahora estoy cansado (mucha navidad encima jaja), pero cumple lo pedido.

Muchas gracias.

Felicidades!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar