Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Ordenar lista con sort() y key en python
#1
Hola, gente, ¿ cómo están?, hola Francisco.-
Les expongo lo que deseo hacer y evidentemente no logro concretar,
estoy haciendo mi propio traductor inglés/español y quisiera ordenar
él .txt que contiene las 1300 palabras, pero los pocos ejemplos que
encuentro con key son sobre diccionarios, concretamente quisiera
ordenar todas las palabras teniendo en cuenta solamente las palabras
en inglés...


Código:
import codecs

palabras = []
with codecs.open('Traductor.txt', 'r', encoding='utf-8') as archivo:
    for tmpLinea in archivo:
        tmpLinea[:].strip()
        linea = tmpLinea.split(',')
        palabras.append(linea)

palabras.sort()

with codecs.open('Traductor.txt', 'w', encoding='utf-8') as archivo:
    for item in palabras:
        final = f"{item[0]},{item[1]}"
        archivo.write(final)


Cita:command,comando mando orden
close,cerrar
clothes,ropa
cloudy,nublado nuboso
club,club discoteca
cold,frío
color,color
college,Universidad
come,ven venir llegar
comes,viene proviene
[...]

Slds. Daniel ☕☕☕
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#2
Hola, Daniel.

Puesto que cada elemento de la lista "palabra" tiene a su vez dos elementos (la palabra en inglés y las traducciones al español), tenés que indicarle al sort() cuál de los dos debe considerar para ordenar la lista. En este caso es siempre el primer elemento de la tupla, que contiene la palabra en inglés. Eso lo podés hacer con una función pasada al argumento key. (saco toda la lógica de archivos para simplificar):

Código:
import pprint

contenido_archivo = """\
command,comando mando orden
close,cerrar
clothes,ropa
cloudy,nublado nuboso
club,club discoteca
cold,frío
color,color
college,Universidad
come,ven venir llegar
comes,viene proviene\
"""

palabras = []
for tmpLinea  in contenido_archivo.split("\n"):
    linea = tmpLinea.strip().split(',')
    palabras.append(linea)

palabras.sort(key=lambda linea: linea[0])
pprint.pprint(palabras)

También podrías usar:

Código:
from operator import itemgetter

# (...código anterior...)

palabras.sort(key=itemgetter(0))

En ambos casos imprime:

Código:
[['close', 'cerrar'],
['clothes', 'ropa'],
['cloudy', 'nublado nuboso'],
['club', 'club discoteca'],
['cold', 'frío'],
['college', 'Universidad'],
['color', 'color'],
['come', 'ven venir llegar'],
['comes', 'viene proviene'],
['command', 'comando mando orden']]

Te dejo una explicación sobre cómo funciona el argumento key: Cómo ordenar una lista o tupla.

Saludos
Responder
#3
Hola gente, ¿ cómo están?.
Mira que sos "complicado" Francisco, sobre que le estoy dedicando todo el día
al estudio de python para completarla, me salís con pprint que en mi bella
vida había oído hablar de ella Big Grin Big Grin Big Grin , gracias todo funciona muy bien, abrazo...

Slds. Daniel ☕☕☕
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#4
¡Creéme que le vas a estar haciendo un gran favor a tu vista usando pprint() para imprimir listas u otras colecciones anidadas! Big Grin

De nada, un abrazo.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)