0-12では、リストを使って複数のデータを順番で管理しました。リストは「0番目、1番目、2番目」のように番号で取り出すときに便利です。
今回学ぶ 辞書 は、番号ではなくキーと呼ばれる名前で値を取り出すデータです。人のプロフィール、部品の在庫数、教科ごとの点数のように、「名前」と「値」をセットで管理したい場面で役立ちます。

まずはPycoBlocksを開こう
下のPycoBlocksで直接作業するか、別タブで開き、生成されるPythonコードを見ながら進めてください。
| 用語 | 意味 | 例 |
|---|---|---|
| 辞書(dict) | キーと値をセットで管理するデータ。{} で表す |
{"name": "Taro", "age": 16} |
| キー(key) | 値を取り出すために使う名前。文字列が多い | "name"、"math" |
| 値(value) | キーに対応するデータ | "Taro"、80 |
dict.keys() |
辞書に入っているキーの一覧を返すメソッド | list(scores.keys()) |
ステップ1:辞書は「キー」と「値」のセット
辞書は、{"name": "Taro", "age": 16} のように、キーと値を : でつなげて書きます。キーを指定すると、それに対応する値を取り出せます。

person = {"name": "Taro", "age": 16}
print(person["name"])
person["name"] は、辞書 person の中から "name" というキーに対応する値を取り出します。この例では Taro が表示されます。
ステップ2:リストと辞書の違い
リストは順番で管理するので、scores[0] のように番号で取り出します。辞書は意味のある名前で管理するので、scores["math"] のようにキーで取り出します。

scores_list = [80, 90]
print(scores_list[0])
scores_dict = {"math": 80, "science": 90}
print(scores_dict["math"])
どちらがよいかは場面によって変わります。「先頭から順に処理したい」ならリスト、「数学の点数、理科の点数のように名前で取り出したい」なら辞書が向いています。
ステップ3:辞書に新しい値を追加しよう
辞書はあとからキーと値を追加できます。dict[key] = value の形で、指定したキーに値を入れます。すでに同じキーがある場合は、値が上書きされます。

stock = {"LED": 3, "motor": 1}
stock["sensor"] = 2
print(list(stock.keys()))
stock["sensor"] = 2 により、"sensor" というキーと 2 という値が追加されます。keys() を使うと、辞書に入っているキーの一覧を確認できます。
ステップ4:キーを順番に取り出して処理しよう
辞書そのものは「キーで取り出す」データですが、キーの一覧を作れば for と組み合わせて順番に処理できます。PycoBlocksでは、キー一覧をリストとして取り出してからループします。

scores = {"math": 80, "science": 90}
keys = list(scores.keys())
for name in keys:
print(scores[name])
name には "math"、"science" のようなキーが順番に入ります。scores[name] と書くことで、そのキーに対応する点数を取り出せます。
コーディングモードで書いてみよう
辞書は、ロボットや電子工作の部品管理にも向いています。部品名をキー、個数を値にしておくと、「LEDは何個あるか」を名前で確認できます。
parts = {
"LED": 10,
"resistor": 25,
"sensor": 3
}
parts["motor"] = 2
for name in list(parts.keys()):
print(name, parts[name])
このように、辞書を使うと「何の値なのか」がコードから読み取りやすくなります。データが増えたときほど、キーの名前が役に立ちます。
演習課題
演習では 0-7 で学んだ if 文と辞書の操作を組み合わせます。値を条件で絞り込む書き方を練習します。
課題13-1:名前を取り出そう
person = {"name": "Taro", "age": 16} を作り、"name" に対応する値を表示してください。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

person = {"name": "Taro", "age": 16}
print(person["name"])
解説: person["name"] のように、角かっこの中にキーを書いて値を取り出します。
課題13-2:在庫を追加しよう
stock = {"LED": 3, "motor": 1} に "sensor": 2 を追加し、キー一覧を表示してください。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

stock = {"LED": 3, "motor": 1}
stock["sensor"] = 2
print(list(stock.keys()))
解説: stock["sensor"] = 2 で新しいキーと値を追加しています。list(stock.keys()) でキー一覧をリストとして表示します。
課題13-3:教科ごとの点数を表示しよう
scores = {"math": 80, "science": 90} を作り、キー一覧を使って点数を1つずつ表示してください。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

scores = {"math": 80, "science": 90}
keys = list(scores.keys())
for name in keys:
print(scores[name])
解説: name にキーが順番に入り、scores[name] で対応する点数を取り出します。
課題13-4:合計金額を計算しよう
prices = {"apple": 120, "orange": 100, "grape": 180} から、すべての値段の合計を求めて表示してください。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

prices = {"apple": 120, "orange": 100, "grape": 180}
total = 0
for name in list(prices.keys()):
total = total + prices[name]
print(total)
解説: list(prices.keys()) でキーの一覧をリストにしてから順に取り出し、prices[name] で値段を合計しています。
課題13-5:個数が足りない部品を見つけよう
parts = {"LED": 10, "motor": 1, "sensor": 2} から、個数が3未満の部品名だけを表示してください。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

parts = {"LED": 10, "motor": 1, "sensor": 2}
for name in list(parts.keys()):
if parts[name] < 3:
print(name)
解説: 0-7で学んだ if と辞書を組み合わせています。値が3未満のときだけ、キーである部品名を表示します。
課題13-6:最高点の教科を探そう
scores = {"math": 80, "science": 90, "english": 75} から、最高点とその教科名を表示してください。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

scores = {"math": 80, "science": 90, "english": 75}
best_name = ""
best_score = 0
for name in list(scores.keys()):
if scores[name] > best_score:
best_name = name
best_score = scores[name]
print(best_name, best_score)
解説: best_score に今まで見つけた最高点を入れておき、それより大きい点数が出たら教科名と点数を更新します。
まとめ
- 辞書は、キーと値をセットで管理するデータです
dict[key]で、キーに対応する値を取り出しますdict[key] = valueで、値の追加や上書きができますkeys()を使うと、辞書に入っているキーの一覧を取り出せます- リストは順番で管理するデータ、辞書は名前で管理するデータとして使い分けます
次は 関数 を学びます。同じ処理に名前をつけて何度も呼び出せるようになると、プログラムをさらに整理しやすくなります。→ Python × 入門 | #14 関数を作ろう