157
123

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pythonのsorted関数で使われるlambdaとは何なのか

Last updated at Posted at 2017-08-25

初投稿です。この記事ではpythonのsorted関数で使われている「lambda」について紹介していきます。

辞書やリストをsortedするときによく見るアレ

辞書やリストをsortする機会は多いと思いますが、その時に

test.py
sorted(d.items(), key=lambda x: x[1])

のような書き方を見たことはありませんか? 私はよく見かけます。
上の例では辞書のvalueを元にソートを実行することになります。

自分でもソートしたい時によく使うのですが、意味もわからず使っていました。
このままではまずいと思うので、調査してみました。

そもそもlambdaって何なの?

lambdaは、無名関数と呼ばれており、
その名のとおり、名前の無い関数を作成する際に使います。

例えば以下の例では、lambda式を使って「引数を2乗して返す無名の関数」を変数aに代入しています。

lambda.py
a = lambda x : x*x
print(a(4)) #16

ここでは「名前の無い関数を作るもの」くらいのイメージを抑えておくだけでよいでしょう。

sorted関数に立ち返ってみる

lambda式が使われているsorted関数を見返してみます。

lambda.py
dictionary = [['なら',3], ['かながわ',4], ['とうきょう',1], ['おおさか',2]]

print(dictionary) # [['なら', 3], ['かながわ', 4], ['とうきょう', 1], ['おおさか', 2]]

sortedDict = sorted(dictionary, key=lambda x: x[1])

print(sortedDict) # [['とうきょう', 1], ['おおさか', 2], ['なら', 3], ['かながわ', 4]]

上記の例ではリストの2番目の要素を元にソートが実施されています。

これはsorted関数のkeyに

「要素xを受け取り、x[1]を返す」

というlambda式を指定したからです。
これにより、sorted関数は、リストの2番目の要素をkeyとしてソートを行うようになったのです。

今度はリストの1番目の要素をkeyとしてソートすることを考えます。
1番目をkeyにしたい場合、lambda式で、リストの一番目を返すような関数を定義してやればよいので、以下のように書き換えればよいです。

lambda.py
dictionary = [['なら',3], ['かながわ',4], ['とうきょう',1], ['おおさか',2]]

print(dictionary) # [['なら', 3], ['かながわ', 4], ['とうきょう', 1], ['おおさか', 2]]

sortedDict = sorted(dictionary, key=lambda x: x[0])# <- x[0]に変更

print(sortedDict) # [['おおさか', 2], ['かながわ', 4], ['とうきょう', 1], ['なら', 3]]

ちゃんと1番目の要素でソートされるようになりましたね。

まとめ:sorted関数におけるlambda式とは

lambda式自体は奥が深いものですが、sorted関数内ではほとんど公式的な使い方しかされません。
なので以下のように丸暗記しておけばよいでしょう。

sorted(【リストor辞書】, key=lambda x: 【keyにしたい要素】)

157
123
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
157
123

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?