コース一覧
    Python内包表記・高階関数
    sortedとkeyの応用

    Python内包表記・高階関数

    内包表記と高階関数を学び、データ変換を簡潔かつ意図どおりに表現できるようにします。

    1
    内包表記
    01. リスト内包表記と条件15分
    02. if-else付き内包表記15分
    03. 辞書内包表記15分
    04. set内包表記15分
    05. ジェネレータ式15分
    06. つくる 集計のリファクタ20分
    07. 第3章クイズ10分
    2
    高階関数
    01. 関数はオブジェクト15分
    02. map15分
    03. filter15分
    04. sortedとkeyの応用15分
    05. reduce15分
    06. anyとall15分
    07. つくる 抽出・変換パイプライン20分
    08. 第4章クイズ10分

    sortedとkeyの応用

    このレッスンでできるようになること。sorted の key にタプルを返す関数を渡して、複数の条件を組み合わせた並べ替えができるようになります。

    sorted(リスト, key=関数) は、要素そのものではなく「関数に通した結果」を基準に並べ替えます。並べ替え用の値を取り出す関数を渡す、という意味で sorted も高階関数です。

    Python

    expenses = [
        {"name": "牛乳", "amount": 220},
        {"name": "書籍", "amount": 2035},
    ]
    by_amount = sorted(expenses, key=lambda e: e["amount"])

    条件を2つ以上重ねたいときは、key でタプルを返します。タプルは前の要素から順に比べられるので、(カテゴリ, 金額) を返せばカテゴリ順に並び、同じカテゴリの中では金額順に並びます。降順にしたい数値はマイナスを付けると、昇順のまま逆順を表せます。

    Python

    ordered = sorted(expenses, key=lambda e: (e["category"], -e["amount"]))

    ここで気を付けたいのが、キーが完全に同じ要素が複数あるときです。Python の sorted は安定ソートなので元の順序を保ちますが、元データの並びが変われば結果も変わり、外から見ると「並びが安定しない」ように見えます。そこで、最後に品名のような重複しない値をキーへ足しておきます。(カテゴリ, -金額, 品名) まで指定すれば順序は一意に決まり、いつ何度実行しても同じ結果になります。

    なお sorted は新しいリストを返し、元のリストは変えません。元のデータを残したまま別の並びが欲しいときに使う道具だと覚えてください。

    要件

    1. sorted の key にタプルを返す関数を渡す
    2. カテゴリ昇順、金額降順、品名昇順の順で比べる
    3. 並べ替えた結果の品名だけをリストで返す

    ヒント

    key=lambda e: (e["category"], -e["amount"], e["name"]) の形になります

    金額だけを降順にしたいので、reverse=True ではなくマイナスを使います

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

    関連レッスン

    • reduce

      functools.reduce で畳み込み集計を書き、sum と比べます。

    • anyとall

      any と all で、予算超過が1件でもあるかを判定します。

    • つくる 抽出・変換パイプライン

      抽出から変換、集計までを高階関数でつないだ処理を組みます。

    • 第4章クイズ

      高階関数の使い分けの理解を確認します。

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

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

    • タプル順序付きで変更不可のシーケンス
    • 関数処理に名前を付けて再利用できる単位
    • リスト順序付きで複数の値を扱うデータ構造
    main.py
    エディタを読み込んでいます

    メモ

    sortedとkeyの応用

    ⌘S で保存