Python TypeError: キー関数にはキーワード引数を使用する必要があります

Salman Mehmood 2024年2月15日
Python TypeError: キー関数にはキーワード引数を使用する必要があります

この記事では、アイテムのリストをソートし、sort() メソッド内でラムダ関数を使用するシンプルで強力な方法に取り組みます。 また、Python の sort() メソッドの実行に失敗した理由についても説明します。

Python の sort() メソッド内でキー引数を使用する正しい方法

順序付けられたデータは、多くの Web サービスの中心にあります。 検索を実行すると、アルゴリズムは関連する結果の順序付けられたリストを返します。オンライン ショッピングでは、製品を価格で並べ替えたいことがよくあります。

カレンダーを見ると、予定が時系列でソートされていることを期待します。

古典的な例から始めて、アルファベット順に並べ替えてみましょう。 6つのアルカリ土類金属のリストを使用します。

それらは原子番号でソートされていますが、アルファベット順にソートするにはどうすればよいでしょうか? リストの場合、sort() メソッドを呼び出します。

sort() メソッドは、データをアルファベット順に昇順でソートすることを想定しています。 データを逆順に並べ替えたい場合は、sort() メソッドを呼び出して、reverseTrue に等しいと指定します。

コード:

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

リストを見ると、名前はアルファベットの逆順にソートされています。

出力:

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

この例を繰り返しましょう。ただし、今回は要素をリストではなくタプルに格納します。 タプルをソートしようとすると、Python は文句を言って例外を発生させます。

このエラーの理由は、タプルが不変オブジェクトであるためです。 それらは変更できず、並べ替えによって変更されます。

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

出力:

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

より複雑な例を見る前に、リストの sort メソッドの help() テキストを見てみましょう。

sort メソッドは、keyreverse の 2つのキーワード引数を受け入れます。 デフォルトでは、reversefalse に設定されています。これは、データが昇順でソートされることを意味します。

コード:

help(list.sort)

出力:

リストの並べ替え方法のヘルプ テキスト

アクションが存在する key 引数に注目しましょう。 key 引数を使用するには、並べ替える値を決定するために使用される関数を渡します。

注文を処理するためのアプリケーションを構築しているとします。この注文アイテムのリストがあり、このリストのすべてのアイテムには、製品名とその価格の 2つのアイテムを持つタプルがあります。 このリストを並べ替えて項目を印刷するとどうなるか見てみましょう。

コード:

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

出力:

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

Python はこのリストをソートする方法を知らないため、コードを実行しても何も変わりません。 この状況では、リストをソートするための Python の関数を定義する必要があります。

ラムダ式または無名関数を使用してよりクリーンにするため、最初にこの関数を定義してから渡す必要はありません。 これの代わりに、ラムダを追加します。ラムダ関数を記述するための構文は次のようになり、パラメーターのコロンと式を追加します。

パラメータは 1つだけです。 次に、コロン (:) の後に、1つのアイテムを返します。

コード:

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

出力:

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

初心者の中には、key 引数に複数の引数値を与えようとすると、key 引数が 1つの値しか受け入れないため、エラーが発生することがあります。 コードの実行に失敗したもう 1つの理由は、key 引数を使用する代わりに関数を直接渡したことです。

著者: Salman Mehmood
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

関連記事 - Python Error