PyQuiz 46 – sorted() con key en Python

El reto
palabras = ['gato', 'ave', 'perro']
resultado = sorted(palabras, key=len)
print(resultado)¿Cuál es el resultado?
- a) ['ave', 'gato', 'perro']
- b) ['perro', 'gato', 'ave']
- c) ['ave', 'gato', 'perro']
Piensa tu respuesta antes de seguir leyendo…
Concepto: sorted() con key
La función sorted(iterable, key=None, reverse=False) devuelve una nueva lista ordenada. El parámetro key acepta una función que se aplica a cada elemento para determinar su valor de comparación. Con key=len, los elementos se ordenan por su longitud.
Python aplica la función key a cada elemento para obtener un valor de comparación, pero los elementos originales son los que aparecen en la lista resultante. Así, sorted(['gato', 'ave', 'perro'], key=len) ordena por longitudes [4, 3, 5] y devuelve los strings originales en ese orden: ['ave', 'gato', 'perro'].
# Ordenar por longitud
palabras = ['banana', 'kiwi', 'pera', 'mango']
print(sorted(palabras, key=len))
# ['kiwi', 'pera', 'mango', 'banana']
# Ordenar por valor absoluto
numeros = [-5, 2, -1, 8, -3]
print(sorted(numeros, key=abs))
# [-1, 2, -3, -5, 8]Paso a paso
palabras = ['gato', 'ave', 'perro']— Lista con tres strings. Sus longitudes:'gato'=4,'ave'=3,'perro'=5.sorted(palabras, key=len)— Python evalúalenpara cada elemento:len('gato')=4,len('ave')=3,len('perro')=5.- Se ordenan los elementos por sus valores de clave:
3 < 4 < 5, es decir,'ave' < 'gato' < 'perro'. resultado = ['ave', 'gato', 'perro']— La lista ordenada por longitud ascendente.print(resultado)— Se imprime['ave', 'gato', 'perro'].
📥 Llévate el cheatsheet de Python (gratis)
PDF de 6 páginas con lo esencial: tipos, condicionales, bucles, estructuras de datos, funciones y los errores que más vas a cometer. Para tener al lado mientras programas.
Sin spam. Te apuntas a la lista, descargas el cheatsheet y recibes contenido de Python cada semana.
Solución
Respuesta correcta: A) ['ave', 'gato', 'perro']
key=len ordena por longitud: 'ave'(3), 'gato'(4), 'perro'(5).
Sabías que...
El parámetro key también acepta lambda, métodos y funciones de operator para ordenaciones más complejas:
from operator import itemgetter
# Ordenar diccionarios por un campo
peliculas = [
{'titulo': 'Matrix', 'anio': 1999},
{'titulo': 'Inception', 'anio': 2010},
{'titulo': 'Interstellar', 'anio': 2014},
]
ordenas_por_anio = sorted(peliculas, key=itemgetter('anio'))
# Ordenar ignorando mayúsculas
nombres = ['ana', 'Bruno', 'carlos', 'Diana']
print(sorted(nombres, key=str.lower))
# ['ana', 'Bruno', 'carlos', 'Diana']
# Orden inverso
print(sorted(palabras, key=len, reverse=True))
# ['perro', 'gato', 'ave']Prueba tú mismo
¿Cómo ordenarías la lista ['Hola', 'mundo', 'Python', 'es', 'genial'] por longitud de mayor a menor? ¿Qué parámetro adicional necesitas?
Más PyQuizzes en elpythonista.com/pyquizzes
Tutorial relacionado: Funciones en Python
¿Quieres aprender Python en orden, no a saltos?
Esto que has leído es solo una pieza. En El Pythonista lo verás todo encadenado: 11 módulos, 37+ horas de vídeo, 734 actividades y un proyecto real (MovieTracker) que crece contigo desde la primera variable hasta el deploy a producción.
37+ horas · 734 actividades · Proyecto real · Acceso de por vida · 14 días de garantía
