辞書の基本

このレッスンで作るもの — 名前を付けて値をしまう 辞書 を覚えて、支出 1 件を {"name": ..., "price": ..., "category": ...} の形で作ります。

辞書の基本

リストは値を順番で管理します。records[0] のように番号で取り出す仕組みでした。これに対して 辞書 は、番号ではなく 名前 で値を取り出します。

支出 1 件を考えます。品名と金額とカテゴリの 3 つをリストで持つと ["りんご", 120, "食費"] になりますが、これでは [1] が金額なのかカテゴリなのか、コードを読んだだけでは分かりません。辞書ならこうなります。

record = {"name": "りんご", "price": 120, "category": "食費"}

record["price"] と書けば金額が取れます。番号を覚える必要がなく、読んだ瞬間に意味が分かります。

番号で並べるならリスト、名前で引くなら辞書です。おこづかい帳の 1 件のように「項目名が決まっているもの」は辞書の出番です。

書き方を確認する

辞書は波かっこ {} で囲み、キー: 値 の組をカンマで並べます。左側を キー、右側を と呼びます。

record = {"name": "ノート", "price": 200, "category": "日用品"} print(record["name"]) print(record["price"])

ノート200 が表示されます。キーは文字列にするのが基本で、クオートで囲みます。値の型は自由で、上の例では namecategorystrpriceint です。

空の辞書は {} と書きます。空のリスト [] と見た目が近いので混同しないよう気をつけます。

あとから追加・変更する

存在しないキーに代入すると 追加、すでにあるキーに代入すると 上書き になります。同じ書き方で両方が起きます。

record = {} record["name"] = "牛乳" record["price"] = 180 record["price"] = 200

最後の行で price200 に上書きされます。辞書に同じキーを 2 つ持つことはできず、あとから書いたほうだけが残ります。

diagram (will load when visible)

動きを追ってみる

make_record("りんご", 120, "食費") が辞書を組み立てる流れを追います。

  1. {} の中に "name": name と書き、引数の name の値である "りんご" が入る
  2. 同じように "price": price120 が入る
  3. "category": category"食費" が入る
  4. できた辞書 {"name": "りんご", "price": 120, "category": "食費"}return する

キーの "name" はクオート付きの文字列、値の name はクオート無しの変数です。この 2 つが並ぶので、慣れるまでは見比べて確認します。

{"name": name} の左右は別物です。左はキーという名札、右は引数に入っている中身です。同じつづりでも役割が違います。

キーの有無を確かめる

無いキーを読むと KeyError で止まります。in を使えば事前に確認できます。

record = {"name": "りんご", "price": 120} print("price" in record) print("category" in record)

TrueFalse が出ます。第 3 章で学んだ in が、辞書ではキーの有無を調べる働きになります。

辞書に対する in はキーだけを見ます。値のほうは見ないので、120 in recordFalse です。

よくある間違い

  1. キーのクオートを忘れるrecord[name] と書くと、name という変数を探しに行ってしまいます。変数が無ければ NameError です。キーを直接書くときは record["name"] とクオートで囲みます。
  2. 無いキーを読むrecord["memo"]KeyError になります。in で確認するか、キーが無くても落ちない record.get("memo") を使います。get は無いとき None を返します。
  3. リストと辞書のかっこを取り違える[] はリスト、{} は辞書です。{"name", "price"} のようにコロンを書き忘れると、辞書ではなく別のものになります。

やってみよう

関数 make_record(name, price, category) を実装してください。3 つの引数から {"name": 品名, "price": 金額, "category": カテゴリ} という辞書を作って return します。

1 つだけ条件があります。category が空文字 "" のときは、代わりに "その他" を入れてください。第 4 章で学んだ「未入力ならその他」の考え方を、辞書の中で使う形です。キーの並びは namepricecategory の順にします。

要件

  1. 関数名は make_record で、引数は name と price と category の3つ
  2. キーは name と price と category の3つを持つ辞書を return する
  3. category が空文字のときは値を "その他" にする
  4. キーの並びは name、price、category の順にする

入出力例

make_record("りんご", 120, "食費"){"category":"食費","name":"りんご","price":120} make_record("ふしぎな買い物", 500, ""){"category":"その他","name":"ふしぎな買い物","price":500} make_record("試供品", 0, "日用品"){"category":"日用品","name":"試供品","price":0} make_record("電車代", 320, "交通費"){"category":"交通費","name":"電車代","price":320} make_record("映画", 1800, "娯楽"){"category":"娯楽","name":"映画","price":1800}

ヒント

生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部
main.py
main.py
学習モード

メモ

辞書の基本

⌘S で保存