回答:
使用する
a = sorted(a, key=lambda x: x.modified, reverse=True)
# ^^^^
Python 2.xでは、sorted
関数は次の順序で引数を取ります。
sorted(iterable, cmp=None, key=None, reverse=False)
したがって、がないkey=
場合、渡したcmp
関数は2つの引数をとる関数と見なされます。
lambda
ので、可能なPythonが別のパラメーターを提供しているようにあなたの答えは聞こえcmp
ますか?
cmp
、コンパレーター関数は2つの引数を取ります。を渡すことを指定しない場合key
、関数パラメーターの順序から、コンパレータを渡すと見なされます。あなたのラムダは1つのパラメータを取るので、有効なコンパレータではありません、そしてそれはエラーが言うことです。
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')]
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
ラムダ関数は、評価されて返される式が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)]
ここで、tuplesを持つstudent_tuplesのリストが、student [2]であるキーパラメータに基づいてソートされていることがわかります。