1. 3 件が金額の小さい順に並ぶ
  2. すでに並んでいるリストは順番が変わらない
  3. 空のリストは空のまま
  4. 同じ金額のときは元の順番が保たれる
  5. 1 件だけならそのまま返る
コース一覧
Python入門:基礎文法編
lambda関数

Python入門:基礎文法編

変数、条件分岐、ループ、関数、リスト・辞書、ファイル操作など Python の基礎文法を、ブラウザ上で毎レッスン実際にコードを書き、自分だけの「おこづかい帳アプリ」を育てながら学べる無料コースです。プログラミング完全未経験から始められ、環境構築や事前知識は一切不要です。約 18 時間 (1 日 30 分 × 37 日) で 74 レッスンを修了でき、修了後は入力・集計・ファイル保存まで備えたスクリプトを1から書けるようになります。

1
はじめての Python
01. printで表示15分
02. 文字列の連結15分
03. 四則演算15分
04. 実行順序15分
05. コメント15分
06. エラーを読んでみる15分
07. つくる:レシート表示15分
08. 第1章クイズ10分
2
変数とデータ型
01. 変数15分
02. typeで型を調べる15分
03. 数値への変換15分
04. 文字列への変換15分
05. boolとNone15分
06. f-string15分
07. 入力を受け取る15分
08. つくる:入力できるおこづかい帳15分
09. 第2章クイズ10分
3
演算子と式
01. 比較演算子15分
02. 論理演算子15分
03. in演算子15分
04. 剰余と切り捨て除算15分
05. 連鎖比較と優先順位15分
06. 三項演算子15分
07. つくる:予算チェック15分
08. 第3章クイズ10分
4
条件分岐
01. if文の基本15分
02. if / elif / else15分
03. 条件の組み合わせ15分
04. match文15分
05. 定番:FizzBuzz判定15分
06. デフォルト値とor15分
07. つくる:カテゴリ自動判定15分
08. 第4章クイズ10分
5
ループ
01. forで合計15分
02. whileで繰り返す15分
03. rangeとstep15分
04. breakとcontinue15分
05. enumerateで番号付け15分
06. zipで組み合わせ15分
07. 入れ子ループ15分
08. つくる:何件でも記録15分
09. 第5章クイズ10分
6
関数
01. 関数を定義する15分
02. 引数と戻り値15分
03. デフォルト引数15分
04. キーワード引数15分
05. 複数の戻り値15分
06. divmod15分
07. 変数のスコープ15分
08. lambda関数15分
09. つくる:関数に分割15分
10. 第6章クイズ10分
7
リストと辞書
01. リストの追加と削除15分
02. スライス15分
03. 辞書の基本15分
04. 辞書を走査15分
05. keyでソート15分
06. setで重複除去15分
07. リスト内包表記15分
08. タプルアンパック15分
09. つくる:カテゴリ別集計15分
10. 第7章クイズ10分
8
ファイルとエラー処理
01. ファイルを読み込む15分
02. ファイルに書き込む15分
03. withで安全に扱う15分
04. CSV形式で保存15分
05. try-exceptで備える15分
06. 例外の種類15分
07. つくる:保存機能15分
08. 第8章クイズ10分
9
総合制作
01. 全機能を統合しよう15分
02. 月間レポート機能15分
03. 自由拡張15分
04. 完成と次のステップ10分

lambda関数

lambda 式

辞書のリストは、そのままでは並べ替えられない

sorted はリストを並べ替えた新しいリストを返す組み込み関数です。数値や文字列のリストなら、渡すだけで並びます。

Python

print(sorted([300, 120, 250]))

[120, 250, 300] が出ます。ところが、おこづかい帳の記録は辞書のリストです。辞書どうしをどう比べればいいのか Python には分からないので、そのまま渡すと TypeError になります。

「金額を見て並べてほしい」という指示を、こちらから渡す必要があります。

何を見て並べるかを、関数で渡す

sorted には key というキーワード引数があります。ここに関数を渡すと、その関数が返した値を見て並べ替えてくれます。

Python

words = ["みかん", "パン", "たまご"] print(sorted(words, key=len))

文字数の少ない順に並びます。渡すのは 関数そのもの です。key=len(words) のようにかっこを付けて呼んでしまうと、返ってきた数値を関数として使おうとして TypeError になります。

len のような出来合いの関数で足りないときは、その場で小さな関数を書きます。それが lambda です。

Python

double = lambda x: x * 2 print(double(4)) print(sorted([12, 7, 20], key=lambda n: n % 10))

8 と [20, 12, 7] が出ます。下は「10 で割った余り」の小さい順に並べたものです。lambda のうしろに引数、半角コロンのうしろに返す値を書きます。return は書きません。書いた式の値が、そのまま戻り値になります。引数には、sorted が 1 件ずつ渡してくれます。

解説

lambda は「その場かぎりの、名前を付けるほどでもない関数」を書く道具です。何行も書きたくなったら、素直に def を使います。

sort は None を返す

sorted は新しいリストを返し、渡したリストはそのままです。前回の考え方どおり、元を壊さない関数は安心して使えます。

紛らわしいのが records.sort() のほうで、こちらは元のリストを並べ替えて None を返します。新しいリストが欲しいのに sort を使うと、戻り値が None になって落ちます。戻り値が None になっていたら、まずここを疑います。

lambda の中に return を書くと SyntaxError です。lambda は文ではなく式なので、返す値だけを書きます。

並べ替えの規則を関数として外から渡せる、という考え方は Python のあちこちで出てきます。並べ替えの基準が同じ値どうしは元の順番が保たれる点も、覚えておくと役に立ちます。

やってみよう

関数 sort_by_price(records) を実装してください。支出のリスト records を、金額 price の 小さい順 に並べ替えた新しいリストを return します。

sorted の key に lambda を渡し、1 件から金額を取り出して返すようにします。辞書からの取り出しは record["price"] の形です。

records が空のリストのときは空のリストが返ります。手元では並べ替えたあとに元の records を表示して、順番が変わっていないことも確かめてみてください。

要件

  1. 関数名は sort_by_price で、引数はリスト records の 1 つ
  2. 金額 price の小さい順に並べ替える
  3. sorted の key に lambda を渡して並べ替えの基準を指定する
  4. 元の records を書き換えず、新しいリストを返す

入出力例

sort_by_price([{"category":"娯楽","name":"映画","price":1800},{"category":"食費","name":"りんご","price":120},{"category":"交通費","name":"電車","price":320}]) → [{"category":"食費","name":"りんご","price":120},{"category":"交通費","name":"電車","price":320},{"category":"娯楽","name":"映画","price":1800}] sort_by_price([{"category":"食費","name":"りんご","price":120},{"category":"食費","name":"パン","price":250}]) → [{"category":"食費","name":"りんご","price":120},{"category":"食費","name":"パン","price":250}] sort_by_price([]) → [] sort_by_price([{"category":"日用品","name":"ノート","price":200},{"category":"日用品","name":"ペン","price":200},{"category":"その他","name":"おまけ","price":0}]) → [{"category":"その他","name":"おまけ","price":0},{"category":"日用品","name":"ノート","price":200},{"category":"日用品","name":"ペン","price":200}] sort_by_price([{"category":"食費","name":"牛乳","price":180}]) → [{"category":"食費","name":"牛乳","price":180}]

ヒント

sorted(records, key=...) の形で並べ替えます

key に渡すのは lambda r: r["price"] です

lambda に return は書きません。コロンのうしろの式が戻り値になります

records.sort() は None を返すので、この課題では sorted を使います

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/08/05·更新 2026/08/26

関連レッスン

  • つくる:関数に分割

    第6章の総仕上げ。件数・合計・残額・予算オーバー判定を辞書で返す summarize を作る

  • 第6章クイズ

    関数の定義と呼び出し、デフォルト引数、複数の戻り値、スコープ、lambda を5問で確認する

  • リストの追加と削除

    append で追加、remove で削除、len で件数。リストを操作する基本のメソッドを覚える

  • ファイルを読み込む

    open と read でテキストファイルを読み込み、splitlines で行のリストに変える

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • リスト順序付きで複数の値を扱うデータ構造
  • 関数処理に名前を付けて再利用できる単位
  • 引数位置引数=順番で渡す。
  • 戻り値呼び出し元への返答を表す点線矢印
  • None「値がない」ことを表す特別な値。
  • lambda名前のない小さな関数を1行で定義する記法。
main.py
学習モード
エディタを読み込んでいます

メモ

lambda関数

⌘S で保存