web-dev-qa-db-ja.com

Pythonのラムダでソートする方法

Pythonでは、日付をラムダでソートしようとしています。エラーメッセージが理解できません。メッセージは次のとおりです。

<lambda>() takes exactly 1 argument (2 given)

私が持っている行は

a = sorted(a, lambda x: x.modified, reverse=True)
138

つかいます

a = sorted(a, key=lambda x: x.modified, reverse=True)
#             ^^^^

Python 2.xでは、sorted関数は次の順序で引数を取ります。

sorted(iterable, cmp=None, key=None, reverse=False)

したがって、key=がない場合、渡す関数は、2つの引数を取るcmp関数と見なされます。

269
kennytm
lst = [('candy','30','100'), ('Apple','10','200'), ('baby','20','300')]
lst.sort(key=lambda x:x[1])
print(lst)

次のように印刷されます。

[('Apple', '10', '200'), ('baby', '20', '300'), ('candy', '30', '100')]
6

Pythonリストには、データをソートするための2つの組み込み方法があります。

sort() — A method that modifies the list in-place
sorted() — A built-in function that builds a new sorted list from an iterable

要件に基づいて、次の2つから選択できます。

元のリストを保持する場合は、ソート機能を使用できます。元のリストが必要ない場合は、ソート機能を使用できます。

ソートまたはソートを行う前に、ラムダを理解する必要があります。

ラムダは無名関数であり、無名関数は名前なしで定義された関数です。この投稿ではそれをかなりうまく説明しているようです。

https://www.programiz.com/python-programming/anonymous-function

Lambda関数は、評価して返される式が1つしかないため、インラインで呼び出すのに適しています。ラムダの構文は次のとおりです。

ラムダ引数:式

ソートされた関数の使用方法を見てみましょう:

student_tuples = [('john', 'A', 15),('jane', 'B', 12),('dave', 'B', 10),]
sorted(student_tuples, key=lambda student: student[2]) 

出力:[( 'dave'、 'B'、10)、( 'jane'、 'B'、12)、( 'john'、 'A'、15)]

ここでは、tuple [2]であるキーパラメーターに基づいて、タプルを持つstudent_tuplesのリストがソートされていることがわかります。

1
Preeti Duhan