【Python】lambda式で辞書やリストをスマートに並び替える – サンプルコード付

今回は無名関数lambda(ラムダ式)のより実践的な例として、辞書やリストをソートする方法を学びましょう。lambdaについてわからない場合はPython の無名関数 lambda(ラムダ式)の基本を参照ください。

辞書型オブジェクトをソート

値(バリュー)で並び替える場合

下のような辞書型オブジェクトを年齢順に並び替えて表示するにはどうすればよいでしょうか?

 

forとifを使って地道にソートする方法を真っ先に思いつくでしょうが、組み込み関数sorted()とlabmdaを使うとわずか1行でソートできてしまいます!

 

sorted()関数は逆順にすることも簡単で、以下のようにreverse=Trueを指定すれば年齢降順に並び替わります。

 

※組み込み関数sorted() について詳しく知りたい方は公式ドキュメントをチェックしてみましょう。
https://docs.python.jp/3/library/functions.html#sorted

 

キーで並び替える場合

辞書のキーと値(バリュー)が逆の場合はどうでしょう。つまり、年齢がキーで名前がバリューの辞書の場合です。

 

辞書の値(バリュー)を基準にソートする場合には x[1] でしたが、キーを基準にソートする場合は x[0] にすればOKです。具体的には下記のようにすれば年齢順に表示することができます。

 

ただし、sorted()関数は引数keyを指定しない場合(デフォルトで)キーを基準にソートします。そのため、キーで並び替える場合にはlambdaが不要となります。※実際上は下のように記述するのがベターでしょう。

 

※Github にこのページのソースコードをアップしています。
https://github.com/toksan/python3_study/blob/master/lambda/example_lambda_sort.py

 

タプルのリストをソート

公式ドキュメント(http://docs.python.jp/3.3/howto/sorting.html)で、タプルを要素に持つリストをソートするコードが紹介されています。(カタカナだらけでルー大柴さん状態で恐縮です)

公式ドキュメントのサンプル抜粋(一部コメントを補足)

 

辞書のときと同様に組み込み関数sorted()とlabmdaを使うとわずか1行でソートできてしまいます!

Python の無名関数 lambda(ラムダ式)の基本では無名関数の有用性がいまいち伝わらなかったと思いますが、このように無名関数を使いこなすと非常に簡潔に記述できることがわかります。

※ map() や filter() とlabmdaの組み合わせもとても強力なので別の機会に紹介できればと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です