elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  lista de palabras agrupada por su letra inicial(diccionario)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: lista de palabras agrupada por su letra inicial(diccionario)  (Leído 5,794 veces)
El mas antiguo

Desconectado Desconectado

Mensajes: 94



Ver Perfil
lista de palabras agrupada por su letra inicial(diccionario)
« en: 24 Noviembre 2022, 20:28 pm »

Citar
1. Escriba un programa en Python que acepte una lista de palabras y las agrupe por su
letra inicial usando un diccionario (solución).
Entrada: [ “mesa”, “móvil”, “barco”, “coche”, “avión”, “bandeja”, “casa”,
“monitor”, “carretera”, “arco”]
Salida: {“m”: [“mesa”, “móvil”, “monitor”], “b”: [“barco”, “bandeja”], “c”:
[“coche”, “casa”, “carretera”], “a”: [“avión”, “arco”]}

Código
  1. palabras = ['mesa', 'móvil', 'barco', 'coche', 'avión', 'bandeja', 'casa',
  2.            'monitor', 'carretera', 'arco']
  3.  
  4. abecedario = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
  5.       'n', 'ñ', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
  6.  
  7. diccionario = {}
  8. for abc in abecedario:
  9.    for pal in palabras:
  10.        if abc == pal[0]:
  11.            diccionario[abc] = [pal]
  12.  
  13. print(diccionario)
  14.  


Hola gente, ¿cómo están? Las consultas es ¿estoy bien encaminado,
o lo harían de otra manera?, no desconozco que no está del todo
bien porque logro poner una sola palabra por letra, pero bueno, ya lo
lograré…

Desde ya muchas gracias…
Slds. Daniel ☕☕☕


En línea

El mas antiguo

Desconectado Desconectado

Mensajes: 94



Ver Perfil
Re: lista de palabras agrupada por su letra inicial(diccionario)
« Respuesta #1 en: 25 Noviembre 2022, 02:23 am »

Bueno, parece funcionar, solo me queda que alguien me diga si hay
una manera mejor/distinta

Código
  1. palabras = ['mesa', 'móvil', 'barco', 'coche', 'avión', 'bandeja', 'casa',
  2.            'monitor', 'carretera', 'arco']
  3.  
  4. abecedario = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
  5.       'n', 'ñ', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
  6.  
  7. diccionario = {}
  8. acumulados = []
  9. for abc in abecedario:
  10.    for pal in palabras:
  11.        if abc == pal[0]:
  12.            acumulados.append(pal)
  13.    if len(acumulados):
  14.        diccionario[abc] = acumulados[:]
  15.        acumulados.clear()
  16.  
  17. for clave, valor in diccionario.items():
  18.    print(clave, ":", valor)

Slds. Daniel ☕☕☕


En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.471


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: lista de palabras agrupada por su letra inicial(diccionario)
« Respuesta #2 en: 25 Noviembre 2022, 03:45 am »

Hola!

Yo lo hice un poco diferente:

Código
  1. palabras = ['mesa', 'movil', 'barco', 'coche', 'avion', 'bandeja', 'casa',
  2.            'monitor', 'carretera', 'arco']
  3. abecedario = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
  4.              'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
  5.  
  6. diccionario = {}
  7. acumulados = []
  8.  
  9. for palabra in palabras:
  10.    if palabra[0] not in diccionario:
  11.        diccionario.update({palabra[0]: [palabra]})
  12.    else:
  13.        diccionario[palabra[0]].append(palabra)
  14. print(diccionario)
  15.  

Saludos!

PD: Perdón por quitar la ñ y tildes; pero mi IDE se queja!  :xD
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

reymosquito

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: lista de palabras agrupada por su letra inicial(diccionario)
« Respuesta #3 en: 25 Noviembre 2022, 04:53 am »

No sé si definir como mejor o peor, pero hay muchas formas de lograr eso:
Código
  1. #-*- coding:utf-8 -*-
  2. palabras = ['mesa', 'móvil', 'barco', 'coche', 'avión', 'bandeja', 'casa',
  3.            'monitor', 'carretera', 'arco']
  4. diccionario={}
  5. for x in palabras:
  6.    if x[0] not in diccionario:
  7.        diccionario.setdefault(x[0],[x])
  8.    else:
  9.        diccionario[x[0]]+=[ x]
  10.  
  11. for clave, valor in diccionario.items():
  12.    print(clave, ":", valor)    
  13.  
En línea

El mas antiguo

Desconectado Desconectado

Mensajes: 94



Ver Perfil
Re: lista de palabras agrupada por su letra inicial(diccionario)
« Respuesta #4 en: 25 Noviembre 2022, 15:26 pm »

Bueno, voy a dividir la respuesta:
MCKSys Argentina gracias por el código, interesante me atrevo a pedirte un favor
y es que me ayudes a hacerlo sin utilizar la lista abecedario, lo intente con chr(97)
pero todavía no lo logro.-
 
=========================================================

Rey, aprovecho para comentarte que el ej. de clase de este post lo guarde en un cuadrito
para tenerlo como ej. principal, gracias…

https://foro.elhacker.net/scripting/que_todos_los_entry_dentro_de_un_frame_sean_readonly_en_tkinter-t516282.0.html

En cuanto a tu código está muy bien, pero es muy avanzado para mí, si bien no son tantas las líneas
no logro entenderlo, lo voy a tener muy en cuenta, lo que ocurre es la primera vez que leo/práctico
sobre diccionario en Python, siempre lo deje a un lado, pero llego el momento de aprender al respecto.-

Slds. Daniel ☕☕☕
En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.471


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: lista de palabras agrupada por su letra inicial(diccionario)
« Respuesta #5 en: 25 Noviembre 2022, 15:58 pm »

MCKSys Argentina gracias por el código, interesante me atrevo a pedirte un favor
y es que me ayudes a hacerlo sin utilizar la lista abecedario, lo intente con chr(97)
pero todavía no lo logro.-

Hola!

Si miras el código, verás que no usa la lista abecedario. Sólo la dejé para que sea parecido a tu código visualmente. Pero no se usa. Te explico lo que hace para que entiendas:

  • El for va iterando por cada palabra de la lista de palabras guardando el valor en "palabra"
  • Se verifica si la primer letra de "palabra" es una clave del diccionario "diccionario"
  • Si no es una clave, se actualiza el diccionario, agregando la primer letra de "palabra" como clave y una lista que contiene a "palabra" como valor del mismo.
  • Si existe, se busca la clave que comience con la primera letra de "palabra" y al valor (que es una lista) se le agrega (append) "palabra"

De esa forma, no necesitas "abecedario": las palabras son el abecedario.

Quitando lo no usado quedaría:
Código
  1. palabras = ['mesa', 'movil', 'barco', 'coche', 'avion', 'bandeja', 'casa',
  2.            'monitor', 'carretera', 'arco']
  3.  
  4. diccionario = {}
  5.  
  6. for palabra in palabras:
  7.    if palabra[0] not in diccionario:
  8.        diccionario.update({palabra[0]: [palabra]})
  9.    else:
  10.        diccionario[palabra[0]].append(palabra)
  11.  
  12. print(diccionario)
  13.  

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

reymosquito

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: lista de palabras agrupada por su letra inicial(diccionario)
« Respuesta #6 en: 25 Noviembre 2022, 15:59 pm »

Daniel:
mil disculpas, me olvido cuando pongo un código que no tienen porque conocer los métodos.

Código
  1. for x in palabras:
  2.    if x[0] not in diccionario:

x[0] es un slice(rebanada), o sea tomo la primer letra de la palabra, para no tener que hacer una lista con las letras, y sino está como clave en el diccionario:
 
Código
  1. diccionario.setdefault(x[0],[x])

setdefault es un método de los diccionarios, verifica si una clave existe y sino está la agrega, con un valor deterninado en este caso una lista con la palabra.
 
en caso contrario:
Código
  1.    else:
  2.        diccionario[x[0]]+=[ x]
  3.  

asigno a la clave un nuevo valor que es agregar la palabra.

sonará raro pero lo hice así porque me pareció más entendible, porque en realidad en mis códigos lo haría con menos líneas:

Código
  1. #-*- coding:utf-8 -*-
  2. palabras = ['mesa', 'móvil', 'barco', 'coche', 'avión', 'bandeja', 'casa',
  3.            'monitor', 'carretera', 'arco']
  4. diccionario={}
  5. for x in palabras:
  6.    diccionario.setdefault(x[0],[])
  7.    diccionario[x[0]]+=[ x]
  8.  
  9. for clave, valor in diccionario.items():
  10.    print(clave, ":", valor)    
  11.  

en donde es lo mismo sin necesidad de los condicionales.
En línea

El mas antiguo

Desconectado Desconectado

Mensajes: 94



Ver Perfil
Re: lista de palabras agrupada por su letra inicial(diccionario)
« Respuesta #7 en: 26 Noviembre 2022, 14:23 pm »

Hola muy buen día para todos.-
Aunque parezca redundante no puedo evitar agradecerle nuevamente a los 2.-
Una última pregunta(es un chiste) si le aplicaran comprensión de diccionario quedaría concluido
con 4 líneas, jajajajaj, abrazo.-

Slds. Daniel ☕☕☕
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines