コース一覧
    Pythonコレクション
    つくる:カテゴリ別集計

    Pythonコレクション

    リスト、辞書、集合、タプルなどのコレクションを学び、複数のデータを適切に扱えるようにします。

    1
    リストと辞書
    01. リストの追加と削除15分
    02. スライス15分
    03. 辞書の基本15分
    04. 辞書を走査15分
    05. keyでソート15分
    06. setで重複除去15分
    07. リスト内包表記15分
    08. タプルアンパック15分
    09. つくる:カテゴリ別集計15分
    10. 第7章クイズ10分

    つくる:カテゴリ別集計

    無いキーを読むと、そこで止まる

    第 6 章の summarize は全体の合計まででした。使ってみると、次にほしくなるのは決まって「何にいくら使ったのか」です。カテゴリごとの合計が出て、はじめて家計簿は役に立ちます。

    作るのは、キーがカテゴリ名、値がそのカテゴリの合計金額という辞書です。

    Python

    {"食費": 300, "日用品": 200}

    カテゴリの数は最初から決まっていないので、リストではなく辞書で持ちます。空の辞書から始めて、記録を 1 件ずつ足し込んでいく形になります。

    ここで最初につまずくのが、まだ 1 度も出てきていないカテゴリです。

    Python

    totals = {"食費": 300}
    print(totals["娯楽"])

    KeyError で止まります。無いキーを読んだときの Python の答えは「そんなものは無い」であって、0 ではありません。足し込む前に、そのキーがすでにあるかどうかを確かめる必要があります。

    確かめ方は 2 つあります。

    Python

    print("娯楽" in totals)
    print(totals.get("娯楽", 0))

    False と 0 が出ます。in はキーがあるかどうかを返し、get は値を取りに行って、無ければ第 2 引数に書いた既定値を返します。どちらを使っても構いません。

    in の意味が入れ物によって変わることも押さえておきます。リストでは値の有無、辞書では キー の有無です。辞書の値のほうは見てくれないので、値を探しているつもりで見つからないときはここを疑います。

    出てこなかったカテゴリは、キーごと入れない

    仕様として決めておくことが 1 つあります。使わなかったカテゴリを 0 で入れるか、入れないかです。

    このアプリでは 入れません。食費しか使っていない月に {"食費": 300, "娯楽": 0, "交通費": 0} が返ってきても、読むときに邪魔なだけだからです。支出が 1 件も無ければ、空の辞書 {} を返します。

    どちらが正しいかではなく、どちらが使いやすいかで選びます。決めたら本文とテストで揺らさないことのほうが大事です。

    できあがる辞書のキーは「最初に出てきた順」に並びます。ただし辞書どうしを比べるとき Python はキーの並びを見ないので、{"a": 1, "b": 2} と {"b": 2, "a": 1} は等しいと判定されます。並びを気にせず書けます。

    値は最後まで int のまま持ちます。途中で str にすると "120" + "180" が "120180" になり、金額として使えなくなります。文字列にするのは画面に出すときだけです。

    やってみよう

    関数 total_by_category(records) を実装してください。支出の辞書が並んだリストを受け取り、キーがカテゴリ名、値がそのカテゴリの合計金額 (int) の辞書を return します。

    登場しなかったカテゴリはキーに含めません。空リストを渡されたときは空の辞書 {} を返します。同じカテゴリが何件あっても、1 つのキーにまとめて足し込んでください。

    要件

    1. 関数名は total_by_category で、引数は records の1つ
    2. キーがカテゴリ名、値がそのカテゴリの合計金額(int)の辞書を return する
    3. 登場しなかったカテゴリはキーに含めない
    4. 空リストを渡されたときは空の辞書 {} を返す

    ヒント

    totals = {} から始めて、for で1件ずつ足し込みます

    if category in totals: で既存かどうかを判定してから足します

    いきなり totals[category] += ... と書くと初回に KeyError になります

    値は int のままにします。str に変換すると文字列の連結になってしまいます

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

    関連レッスン

    • 第7章クイズ

      リストのメソッド、スライス、辞書のキー、set、内包表記の理解を5問で確認する

    • タプルアンパック

      2つの値の組を変数に分解して受け取り、品名と金額を1行の文字列にまとめる

    • リスト内包表記

      for と if を1行に畳むリスト内包表記で、食費の支出だけを抜き出す

    • setで重複除去

      set で重複を消し、sorted で並びを固定して使ったカテゴリ一覧を作る

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

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

    • リスト順序付きで複数の値を扱うデータ構造
    • 引数位置引数=順番で渡す。
    • テストバグを見つける工程
    • 関数処理に名前を付けて再利用できる単位
    main.py
    エディタを読み込んでいます

    メモ

    つくる:カテゴリ別集計

    ⌘S で保存