Python TypeError: debe usar un argumento de palabra clave para la función clave

Salman Mehmood 15 febrero 2024
Python TypeError: debe usar un argumento de palabra clave para la función clave

Este artículo aborda las formas simples y poderosas de ordenar una lista de elementos y usar la función lambda dentro del método sort(). También discutimos por qué fallamos al ejecutar el método sort() de Python.

Manera correcta de usar el argumento clave dentro del método sort() en Python

Los datos ordenados se encuentran en el corazón de muchos servicios web. Cuando realizamos una búsqueda, el algoritmo devuelve una lista ordenada de resultados relevantes, y cuando compramos en línea, a menudo queremos ordenar los productos por precio.

Cuando miramos nuestro calendario, esperamos que nuestras citas estén ordenadas en orden cronológico.

Comencemos con un ejemplo clásico y ordenemos alfabéticamente. Usaremos una lista de seis metales alcalinotérreos.

Están ordenados por número atómico, pero ¿y si quisiéramos ordenarlos alfabéticamente? Para las listas, llamamos al método sort().

El método sort() asume que desea ordenar los datos alfabéticamente, en orden ascendente. Si desea ordenar los datos en orden inverso, llame al método sort() y especifique reverse igual a True.

Código:

Earth_Metals = ["Berylium", "Magnisium", "Calcium", "strontium", "Barium", "Radium"]
Earth_Metals.sort()
print(Earth_Metals)

Si observa la lista, los nombres están ordenados en orden alfabético inverso.

Producción :

['Barium', 'Berylium', 'Calcium', 'Magnisium', 'Radium', 'strontium']

Repitamos este ejemplo, excepto que esta vez almacenamos los elementos en una tupla en lugar de una lista. Cuando intentamos ordenar una tupla, Python se queja y genera una excepción.

El motivo de este error es que las tuplas son objetos inmutables. No se pueden cambiar, y la clasificación cambia las cosas.

Earth_Metals = ("Berylium", "Magnisium", "Calcium", "strontium", "Barium", "Radium")
Earth_Metals.sort()
print(Earth_Metals)

Producción :

AttributeError: 'tuple' object has no attribute 'sort'

Antes de ver un ejemplo más complejo, veamos el texto de ayuda() para el método ordenar en las listas.

El método de clasificación acepta dos argumentos de palabras clave, la clave y la reversa. De forma predeterminada, el reverso se establece en false, lo que significa que los datos se ordenarán en orden ascendente.

Código:

help(list.sort)

Producción:

texto de ayuda para el método de clasificación en la lista

Centrémonos en el argumento clave donde reside la acción. Para usar el argumento clave, pasa una función que se usará para determinar qué valores ordenar.

Supongamos que estamos construyendo una aplicación para procesar pedidos, y tenemos esta lista de artículos de pedido, y en cada artículo de esta lista hay una tupla con dos artículos, el nombre del producto y su precio. Veamos qué sucederá si ordenamos esta lista e imprimimos los elementos.

Código:

items = [("product1", 10), ("product2", 9), ("product3", 12)]
items.sort()
print(items)

Producción :

[('product1', 10), ('product2', 9), ('product3', 12)]

Nada cambia cuando ejecutamos el código porque Python no sabe cómo ordenar esta lista. En esta situación, necesitamos definir la función de Python para ordenar listas.

Lo haremos más limpio usando una expresión lambda o una función anónima, por lo que no tenemos que definir esta función primero y luego pasarla. En lugar de esto, agregamos lambda, y la sintaxis para escribir una función lambda es así: agregamos los parámetros dos puntos y luego la expresión.

Tendremos un solo parámetro; luego, después de los dos puntos (:), estamos devolviendo un elemento de uno.

Código:

items = [("product1", 10), ("product2", 9), ("product3", 12)]
items.sort(key=lambda item: item[1])
print(items)

Producción :

[('product2', 9), ('product1', 10), ('product3', 12)]

Algunos principiantes intentan dar más de un valor de argumento al argumento clave y obtienen un error porque el argumento clave solo acepta un valor. Otra razón por la que no pudimos ejecutar el código fue que pasamos directamente la función en lugar de usar el argumento clave.

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

Artículo relacionado - Python Error