Python TypeError: Schlüsselwortargument muss für Schlüsselfunktion verwendet werden

Salman Mehmood 15 Februar 2024
Python TypeError: Schlüsselwortargument muss für Schlüsselfunktion verwendet werden

Dieser Artikel befasst sich mit den einfachen und leistungsstarken Möglichkeiten, eine Liste von Elementen zu sortieren und die Lambda-Funktion innerhalb der sort()-Methode zu verwenden. Wir diskutieren auch, warum wir Pythons sort()-Methode nicht ausgeführt haben.

Korrekte Verwendung des Schlüsselarguments innerhalb der sort()-Methode in Python

Bestellte Daten sind das Herzstück vieler Webdienste. Wenn wir eine Suche durchführen, gibt der Algorithmus eine geordnete Liste relevanter Ergebnisse zurück, und beim Online-Einkauf möchten wir Produkte oft nach Preis sortieren.

Wenn wir in unseren Kalender schauen, erwarten wir, dass unsere Termine chronologisch sortiert sind.

Beginnen wir mit einem klassischen Beispiel und sortieren alphabetisch. Wir verwenden eine Liste von sechs Erdalkalimetallen.

Sie sind nach Ordnungszahl sortiert, aber was wäre, wenn wir sie alphabetisch sortieren wollten? Für Listen rufen wir die Methode sort() auf.

Die Methode sort() geht davon aus, dass Sie die Daten alphabetisch in aufsteigender Reihenfolge sortieren möchten. Wenn Sie die Daten in umgekehrter Reihenfolge sortieren möchten, rufen Sie die Methode sort() auf und geben an, dass reverse gleich True ist.

Code:

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

Wenn Sie sich die Liste ansehen, sind die Namen in umgekehrter alphabetischer Reihenfolge sortiert.

Ausgang:

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

Lassen Sie uns dieses Beispiel wiederholen, außer dass wir dieses Mal die Elemente in einem Tupel und nicht in einer Liste speichern. Wenn wir versuchen, ein Tupel zu sortieren, beschwert sich Python und löst eine Ausnahme aus.

Der Grund für diesen Fehler liegt darin, dass Tupel unveränderliche Objekte sind. Sie können nicht geändert werden, und das Sortieren ändert die Dinge.

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

Ausgang:

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

Bevor wir ein komplexeres Beispiel sehen, schauen wir uns den Text help() für die Methode sort auf Listen an.

Die sort-Methode akzeptiert zwei Schlüsselwortargumente, key und reverse. Standardmäßig ist reverse auf false eingestellt, was bedeutet, dass die Daten aufsteigend sortiert werden.

Code:

help(list.sort)

Ausgang:

Hilfetext für die Sortiermethode in der Liste

Konzentrieren wir uns auf das Schlüsselargument, wo die Handlung liegt. Um das Schlüsselargument zu verwenden, übergeben Sie eine Funktion, die verwendet wird, um zu bestimmen, nach welchen Werten sortiert werden soll.

Angenommen, wir erstellen eine Anwendung zur Verarbeitung von Bestellungen und haben diese Liste mit Bestellartikeln, und in jedem Artikel in dieser Liste ist ein Tupel mit zwei Artikeln, dem Produktnamen und seinem Preis. Mal sehen, was passiert, wenn wir diese Liste sortieren und die Artikel drucken.

Code:

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

Ausgang:

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

Es ändert sich nichts, wenn wir den Code ausführen, da Python nicht weiß, wie diese Liste zu sortieren ist. In dieser Situation müssen wir die Python-Funktion zum Sortieren von Listen definieren.

Wir werden es sauberer machen, indem wir einen Lambda-Ausdruck oder eine anonyme Funktion verwenden, sodass wir diese Funktion nicht zuerst definieren und dann übergeben müssen. Stattdessen fügen wir Lambda hinzu, und die Syntax zum Schreiben einer Lambda-Funktion sieht so aus: Wir fügen Parameter Doppelpunkt und dann Ausdruck hinzu.

Wir haben nur einen Parameter; dann geben wir nach dem Doppelpunkt (:) ein Element von eins zurück.

Code:

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

Ausgang:

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

Einige Anfänger versuchen, dem Argument Schlüssel mehr als einen Argumentwert zuzuweisen, und erhalten eine Fehlermeldung, weil das Argument Schlüssel nur einen Wert akzeptiert. Ein weiterer Grund, warum wir den Code nicht ausgeführt haben, war, dass wir die Funktion direkt übergeben haben, anstatt das Argument Schlüssel zu verwenden.

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

Verwandter Artikel - Python Error