Sort()メソッドまたは他のメソッドを使用してリストを列でソートする方法はありますか?リストがあるとしましょう:
[
[John,2],
[Jim,9],
[Jason,1]
]
そして、次のようにソートしたかったのです。
[
[Jason,1],
[John,2],
[Jim,9],
]
これを行うための最良のアプローチは何でしょうか?
編集:
現在、範囲外のインデックスエラーが発生しています。私は、たとえば1000行b 3列の2次元配列を持っています。 3番目の列に基づいて並べ替えます。これはそのための正しいコードですか?
sorted_list = sorted(list_not_sorted, key=lambda x:x[2])
はい。 sorted
ビルトインは、key
引数を受け入れます。
sorted(li,key=lambda x: x[1])
Out[31]: [['Jason', 1], ['John', 2], ['Jim', 9]]
sorted
は新しいリストを返すことに注意してください。インプレースで並べ替える場合は、.sort
リストのメソッド(便利なことに、key
引数も受け入れます)。
または、代わりに、
from operator import itemgetter
sorted(li,key=itemgetter(1))
Out[33]: [['Jason', 1], ['John', 2], ['Jim', 9]]
キーでソートされたメソッドを使用できます。
sorted(a, key=lambda x : x[1])
list.sort
をオプションの key
パラメーター および lambda
式 とともに使用できます。
>>> lst = [
... ['John',2],
... ['Jim',9],
... ['Jason',1]
... ]
>>> lst.sort(key=lambda x:x[1])
>>> lst
[['Jason', 1], ['John', 2], ['Jim', 9]]
>>>
これにより、リストがその場でソートされます。
リストが大きい場合、lambda
の代わりに operator.itemgetter
を使用する方が高速です。
>>> from operator import itemgetter
>>> lst = [
... ['John',2],
... ['Jim',9],
... ['Jason',1]
... ]
>>> lst.sort(key=itemgetter(1))
>>> lst
[['Jason', 1], ['John', 2], ['Jim', 9]]
>>>
sorted(list, key=lambda x: x[1])
注:これは時間変数でも機能します。
key
/sort
のオプションのsorted
パラメーターは関数です。この関数は各アイテムに対して呼び出され、戻り値はソートの順序を決定します
>>> lst = [['John', 2], ['Jim', 9], ['Jason', 1]]
>>> def my_key_func(item):
... print("The key for {} is {}".format(item, item[1]))
... return item[1]
...
>>> sorted(lst, key=my_key_func)
The key for ['John', 2] is 2
The key for ['Jim', 9] is 9
The key for ['Jason', 1] is 1
[['Jason', 1], ['John', 2], ['Jim', 9]]
関数の葉からprint
を取り出す
>>> def my_key_func(item):
... return item[1]
この関数は、ラムダ関数として「インライン」を記述するのに十分簡単です。
>>> sorted(lst, key=lambda item: item[1])
[['Jason', 1], ['John', 2], ['Jim', 9]]