リスト内包表記と条件
このレッスンでできるようになること。条件付きのリスト内包表記を使って、支出データから欲しいものだけを1行で取り出せるようになります。
第2章では、支出を辞書で表し、それをリストに並べて持つ形に整えました。1件の支出は次のような形です。
{"name": "スーパー", "amount": 3200, "category": "食費", "date": "2026-06-03"}ここから食費だけを取り出すとき、これまでは空のリストを用意して for でまわし、条件に合ったら append する、という3行のコードを書いていました。
foods = []
for e in expenses:
if e["category"] == "食費":
foods.append(e)リスト内包表記を使うと、この処理をそのまま1行にたためます。書き方は「取り出す式」「for 変数 in もとのデータ」「if 条件」の順で、角かっこの中に並べるだけです。
foods = [e for e in expenses if e["category"] == "食費"]意味は先ほどのループとまったく同じで、新しいリストが作られて返ります。読むときは真ん中の for から読み始め、次に if の条件で残すものを決め、最後にいちばん左の式が結果になる、と考えると迷いません。
if は省略できます。省略すると全件がそのまま新しいリストに入るので、金額だけを抜き出したいときは [e["amount"] for e in expenses] のように書けます。左の式は変数そのものでなくてよい、というのが内包表記の便利なところです。
注意点として、内包表記は「新しいリストを作る」ための書き方です。1件ずつ画面に表示するだけの処理を内包表記で書くと、使われないリストが残ってしまいます。結果を受け取って使うときだけ内包表記にする、と覚えておいてください。
要件
- for 文と append ではなく、リスト内包表記で書くこと
- category が一致する支出だけを残すこと
- 一致するものが無いときは空のリストを返すこと
入出力例
pick_category([{"amount":3200,"category":"食費","date":"2026-06-03","name":"スーパー"},{"amount":480,"category":"交通費","date":"2026-06-05","name":"電車代"},{"amount":620,"category":"食費","date":"2026-06-08","name":"コンビニ"}], "食費") → [{"amount":3200,"category":"食費","date":"2026-06-03","name":"スーパー"},{"amount":620,"category":"食費","date":"2026-06-08","name":"コンビニ"}]
pick_category([{"amount":3200,"category":"食費","date":"2026-06-03","name":"スーパー"},{"amount":480,"category":"交通費","date":"2026-06-05","name":"電車代"}], "交通費") → [{"amount":480,"category":"交通費","date":"2026-06-05","name":"電車代"}]ヒント
編集 LuaGate編集部