本記事ではPythonで数字や文字列を順序通り並び替えられるソート機能についてご紹介していきます。
ソースコード
gistcf811869f2698a904fc1faa18933f76e
1 :Sort と Sorted
Pythonで最も使われるソートとして、SortとSorted関数があります。
Sort はリスト内をソート、Sorted はリスト内をソートして新しいリストを作るため、場面によって使い分けてください。
使い分けをしないと最初の sort_list の結果が、例示してあるように None になります。
2 :reverse
Sort もしくは Sorted 関数の引数に【reverse=True】と入力することで、昇順を降順に変更することができます。
一応【reverse=False】と記載すると昇順のままにできますが、書かない場合と一緒であるため省略したほうが可読性が増します。
3 :辞書型のソート
辞書型をソートする時は少し複雑になりますが、最も初心者が分かりにくくしているのは【lambda】だと思います。
【lambda】の使い方や意味については、下記の記事を参考にしてください。
簡単に説明すると、ただ x[0] の値を返すだけの関数をその場で作りKeyに、つまり基準にしたことになります。
さらに詳細に説明すると、lambdaを使わなかった場合は下記のようになります。
- number_dict = {
- "D":3,
- "B":1,
- "A":2,
- "C":4
- }
- def func(item):
- return item[0]
- sort_dict = sorted(number_dict.items(),key=func)
- print(f"sort = {sort_dict}")
- #結果
- # sort = [('A', 2), ('B', 1), ('C', 4), ('D', 3)]
この【func】という関数が、lambdaの代わりに作られた関数です。
【func(item)】の引数item には、【number_dict.items()】つまり【("D",3),("B",1),("A",2),("C",4)】のリストが代入されていきます。
そして【return item[0]】でitem[0]、つまりKeyだけが抽出され基準となり、正確な処理結果が得られるでしょう。
さて後はこの【func】関数を省略していくことを目指します。
まず【func】関数を無理やり Sorted の中に無理矢理入れたのが下記です。
- sort_dict = sorted(number_dict.items(),key=def func(item): return item[0])
上記のプログラムは動きませんので、動く用に無名関数lambdaを使うと下記のように変わります。
- sort_dict = sorted(number_dict.items(),key=lambda item:item[0])
最後に、毎度 item と記載するのが煩わしいため簡単に書け変数としての意味合いの強い x を使うと
- sort_dict = sorted(number_dict.items(),key=lambda x:x[0])
上記のように最初のコードが出ます。
4 :関数をKeyに設定
こちらは前節の詳細な内容で先にご紹介してしまいましたが、Key へ自分で作成した関数を割り当てられます。
【SortKey(key)】がその自分で作成した関数となります。
5 :特殊な使い方1
次に特殊な使い方として、ソート中に特別なルールを追加する方法です。
本記事のサンプルでは、Keyが"pc"であった場合-1を、文字列ではなかった場合-2を返す用にしています。
ただし、この方法だと出力結果にKeyしか残らないため、値とのペアでソートしたい場合に使えません。
6:特殊な使い方2
5 と同じ動きをしつつ、出力結果に Key と Val のペアを残したのが、この方法となります。
【SortSpecial(item)】の item には、タプルがリストになって入っていきます。
気になった人は、途中でprintで確認してみてください。
公式ドキュメント
参考記事
本記事の内容は以上となります。
ソート機能はデータ処理を行っていればよく使うと思いますが、初めての時は迷うことが多いでしょう。
そんな時はぜひ本記事を参考にしてもらえればと思います。
本記事は以上です。お疲れさまでした。