Pythonの辞書型(連想配列)の使い方について入門者向けに解説します。
辞書型とは
Pythonの辞書型(dictionary)は、リストやタプルのように複数のデータをまとめて扱えるデータ型です。ただし、リストやタプルが「番号」でデータを管理するのに対して、辞書型は「キー(データの名前)」でデータを管理します。
キーには、文字列・数値・タプルなどを使うことができ、データ全体は中括弧 {}
で囲みます。
(キーに使えないのは、値を書き換えできる変数やリストです)
【書式】
# 辞書の作成 辞書 = {キー1 : 値1, キー2 : 値2, …} # 値の取り出し 変数 = [キー1]
以下のコードは、キーに文字列を設定した例です。
# 勇者ぴこりの持ち物リスト(辞書型)
pikori_items = {
"回復薬": 5,
"魔法の書": 2,
"鉄の剣": 1
}
# キーが「魔法の書」の値を取得
magic_book_num = mapikori_items["魔法の書"]
# 「魔法の書」の所持数を表示
print("魔法の書:", magic_book_num)
上記コードでは、要素(キーと値のセット)が3つある辞書「pikori_items」を作成し、キーが「”魔法の書”」の値を取り出して標準出力しています。
このように、辞書型ではキーに文字列を使うと、データを管理しやすくなります。
他の言語では「連想配列」や「マップ」と呼ばれることもありますが、Pythonでは「辞書型」と呼ばれています。
先程のコードでは、カンマの後を改行しています。複数のキーと値がある場合、以下のように1行に全部書くと見づらくなります。改行してもしなくても動作には影響ありませんが、要素が増えると構造がわかりにくくなるため、このように改行するのが一般的です。
# 改行なし(読みにくい)
pikori_items = {"回復薬": 5, "魔法の書": 2, "鉄の剣": 1}
# 改行あり(読みやすい)
pikori_items = {
"回復薬": 5,
"魔法の書": 2,
"鉄の剣": 1
}
要素の値を取得
辞書[キー]
で指定したキーの値を取り出す方法を紹介しましたが、以下のようにKeyError「存在しないキーを指定するとエラー」となります。
# 勇者ぴこりの持ち物リスト(辞書型)
pikori_items = {
"回復薬": 5,
"魔法の書": 2,
"鉄の剣": 1
}
# キーが「賢者の書」の値を取得
wise_book_num = pikori_items["賢者の書"]
# 「賢者の書」の所持数を表示
print("賢者の書:", wise_book_num)
File “/tmp/main.py”, line 2, in
import user_code
File “/tmp/user_code.py”, line 9, in
wise_book_num = pikori_items[“賢者の書”]
~~~~~~~~~~~~^^^^^^^^
KeyError: ‘賢者の書’
そこで、以下コードのようにget()
メソッドを使うことで、「存在するキーなら値を取得」し、「存在しないキーならエラーを出さずにデフォルト値を返す」ことができます。
# 勇者ぴこりの持ち物リスト(辞書型)
pikori_items = {
"回復薬": 5,
"魔法の書": 2,
"鉄の剣": 1
}
# キーが「賢者の書」の値を取得
wise_book_num = pikori_items.get("賢者の書", 0)
# 「賢者の書」の所持数を表示
print("賢者の書:", wise_book_num)
上記コードのように、get()メソッドの第一引数には「取り出したい値のキー」、第二引数にはキーが存在しない場合のデフォルト値を指定します。実行結果では、「賢者の書」というキーが辞書「pikori_items」に存在しないため、0となっています。
辞書型とJSON
辞書型は、JSON形式のデータを扱う際にもよく使われます。JSONは「キーと値のペア」で構成されており、Pythonの辞書型と非常に似ています。
たとえば、気象庁の「天気予報 Web API」から取得できる兵庫県南部のデータは、以下のようなJSON形式です。
{
"publishingOffice": "気象庁",
"reportDatetime": "2025-09-13T05:00:00+09:00",
"targetArea": "兵庫県南部",
"headlineText": "晴れ時々くもり",
"text": "13日は高気圧に覆われて晴れるでしょう。14日は気圧の谷の影響で曇りや雨となる見込みです。"
}
キー | 内容 |
---|---|
"publishingOffice" |
発表元(例:気象庁) |
"reportDatetime" |
発表日時 |
"targetArea" |
対象地域 |
"headlineText" |
天気の概要(短い説明) |
"text" |
詳細な天気概況 |
このように、WebAPIから取得したデータは、Pythonの辞書型としてそのまま扱えます。
例えば、以下のように、キーを指定して必要な情報だけを取り出すことができます。
weather_data = {
"publishingOffice": "気象庁",
"reportDatetime": "2025-09-13T05:00:00+09:00",
"targetArea": "兵庫県南部",
"headlineText": "晴れ時々くもり",
"text": "13日は高気圧に覆われて晴れるでしょう。14日は気圧の谷の影響で曇りや雨となる見込みです。"
}
# 天気予報を確認する
print("【" + weather_data["targetArea"] + "の天気】")
print("発表: " + weather_data["publishingOffice"])
print("日時: " + weather_data["reportDatetime"])
print("概要: " + weather_data["headlineText"])
print("詳細: " + weather_data["text"])
Web開発やシステム連携では頻繁に使われるので、辞書型の理解はとても重要です。
要素数を取得
辞書型では、キーと値のペアが1セットで1要素と数えられます。
要素の数を調べたいときは、以下コードのように、Pythonの組み込み関数 len()
を使います。
# 勇者ぴこりの持ち物リスト(辞書型)
pikori_items = {
"回復薬": 5,
"魔法の書": 2,
"鉄の剣": 1
}
# 要素数を取得
pikori_item_num = len(pikori_items)
# 結果を表示
print("アイテムの種類:", pikori_item_num) # 出力: 2
pikori_items
には3種類のアイテムが登録されているので、len(pikori_items)
の結果は 3
になります。
len()
は「キーと値のセット」の数を数える(値が何個であっても、キーの数が要素数になる)・リストやタプルと同じように使えるが、辞書型では「種類数」を数える感覚

要素を更新・追加・連結
Pythonの辞書型では、辞書[キー] = 値
で直接代入すれば、指定したキーの値を更新できます。もしキー名が辞書に存在しない場合、「新しいキーと値のセット」として、要素が追加されます。
以下のコードは、直接代入により辞書「pikori_items」に要素を追加する例です。
# 勇者ぴこりの持ち物リスト(辞書型)
pikori_items = {
"回復薬": 5,
"魔法の書": 2,
"鉄の剣": 1
}
# 所有するアイテム「回復薬」の個数を4に変更
pikori_items["回復薬"] = 4
# 新しいアイテム「氷の指輪」を追加
pikori_items["氷の指輪"] = 1
# 結果を表示
print("勇者ぴこりの持ち物:", pikori_items)
updateメソッドを使って、持ち物リストに新しいアイテムをまとめて追加できます。
以下のコードは、updateメソッドで辞書「pikori_items」の値をまとめて修正・新規追加する例です。
# 勇者ぴこりの持ち物リスト(辞書型) pikori_items = { "回復薬": 5, "魔法の書": 2, "鉄の剣": 1 } # 所有するアイテムの変更後の個数 update_pikori_items = { "回復薬": 4, "魔法の書": 3 } # 持ち物リストを更新 pikori_items.updateupdate_pikori_items) # 新しく手に入れたアイテム new_items = { "炎の盾": 1, "エリクサー": 2 } # 持ち物リストに追加 pikori_items.update(new_items) ## 結果を表示 print("勇者ぴこりの持ち物:", pikori_items)

要素を削除
Pythonの辞書型では、del文やpopメソッドで「特定の要素だけを削除」したり、del文やclearメソッドで「すべての要素を一括削除」できます。
また、popitem()
メソッドで最後の要素だけを削除できます。
サンプルコード①
以下のコードは、del文で「指定したキーの要素を削除」する例です。(削除された値は取得できません)
# 勇者ぴこりの持ち物リスト
pikori_items = {
"回復薬": 5,
"魔法の書": 2,
"鉄の剣": 1
}
# キーが「魔法の書」の要素を削除
del pikori_items["魔法の書"]
# 結果の表示
print("勇者ぴこりの持ち物:", pikori_items)
サンプルコード②
以下のコードは、popメソッドで「指定したキーの要素を削除」する例です。(削除された値の取得は可能)
# 勇者ぴこりの持ち物リスト
pikori_items = {
"回復薬": 5,
"魔法の書": 2,
"鉄の剣": 1
}
# 「回復薬」を削除する(個数も取得)
used_item = pikori_items.pop("回復薬")
# 結果を表示
print("消費した数:", used_item)
print("勇者ぴこりの持ち物:", pikori_items)
勇者ぴこりの持ち物: {‘魔法の書’: 2, ‘鉄の剣’: 1}
popメソッドは、削除と同時に値を返してくれます。
サンプルコード③
以下のコードは、clearメソッドで「指定したキーの要素を削除」する例です。
# 勇者ぴこりの持ち物リスト
pikori_items = {
"回復薬": 5,
"魔法の書": 2,
"鉄の剣": 1
}
# 中身を全て削除
pikori_items.clear()
# 結果を表示
print("勇者ぴこりの持ち物:", pikori_items)
clearメソッドにより辞書(pikori_items)の要素はすべて削除されますが、辞書自体は中身が空の状態で残ります。
サンプルコード④
以下コードのように、del文で変数を指定すると、辞書自体も削除されます。
# 勇者ぴこりの持ち物リスト
pikori_items = {
"回復薬": 5,
"魔法の書": 2,
"鉄の剣": 1
}
# 辞書自体を削除
del pikori_items
# 結果を表示
print("勇者ぴこりの持ち物:", pikori_items)
File “/tmp/main.py”, line 2, in
import user_code
File “/tmp/user_code.py”, line 12, in
print(“勇者ぴこりの持ち物:”, pikori_items)
^^^^^^^^^^^^
NameError: name ‘pikori_items’ is not defined
[Execution complete with exit code 1]
辞書(pikori_items)そのものが削除されたため、辞書を呼び出すると上記のエラー(NameError: name ‘pikori_items’ is not defined)が出ます。
サンプルコード⑤
以下のコードは、popitem()
メソッドで最後の要素だけを削除する例です。
# 勇者ぴこりの持ち物リスト
pikori_items = {
"回復薬": 5,
"魔法の書": 2,
"鉄の剣": 1
}
# 後の要素だけを削除
last_item = pikori_items.popitem()
# 結果を表示
print("捨てた持ち物:", last_item)
print("勇者ぴこりの持ち物:", pikori_items)
勇者ぴこりの持ち物: {‘回復薬’: 5, ‘魔法の書’: 2}

要素のキーと値を取得
Pythonの辞書型では、以下のメソッドで辞書から要素や値を取得できます。
メソッド | 動作 |
---|---|
keys() | すべての要素のキー |
values() | すべての要素の値 |
items() | すべての要素のキーと値 |
以下のコードは、keysメソッドとvaluesメソッドの使用例です。
# 勇者ぴこりの持ち物リスト(辞書型)
pikori_items = {
"回復薬": 5,
"魔法の書": 2,
"鉄の剣": 1
}
# アイテム名の一覧(キー)を取得
pikori_item_keys = pikori_items.keys()
# アイテムの個数(値)を取得
pikori_item_values = pikori_items.values()
# アイテム名一覧(キー)
print("所有しているアイテムの種類", pikori_item_keys)
# アイテムの個数一覧(値)
print("所有しているアイテムの数", pikori_item_values)
所有しているアイテムの数 dict_values([5, 2, 1])
keys()
メソッドで得られたデータは →dict_keys
型、 values()
で得られたデータは dict_values
型となります。
以下コードのように、組み込み関数list()
でリストに変換すると、扱いやすくなります。
# 勇者ぴこりの持ち物リスト(辞書型)
pikori_items = {
"回復薬": 5,
"魔法の書": 2,
"鉄の剣": 1
}
# アイテムの個数(値)を取得、リストに変換
pikori_item_values = list(pikori_items.values())
# アイテムの個数一覧(値)
print("回復薬:", pikori_item_values[0])
print("魔法の書:", pikori_item_values[1])
print("鉄の剣:", pikori_item_values[2])
魔法の書: 2
鉄の剣: 1
以下のコードは、itemsメソッドで「要素のキーと値」を取得する例です。
# 勇者ぴこりの持ち物リスト(辞書型)
pikori_items = {
"回復薬": 5,
"魔法の書": 2,
"鉄の剣": 1
}
# アイテム(キーと値)を取得
pikori_items2 = pikori_items.items()
# 結果を表示
print("所有しているアイテム:", pikori_items2)
items()
メソッドで得られたデータは、dict_items
型となります。
以下コードのように、組み込み関数 list()
でリストに変換すると、扱いやすくなります。
# 勇者ぴこりの持ち物リスト(辞書型)
pikori_items = {
"回復薬": 5,
"魔法の書": 2,
"鉄の剣": 1
}
# アイテム(キーと値)を取得し、リストに変換
pikori_item_items = list(pikori_items.items())
# 結果を表示
print("所有しているアイテム:", pikori_item_items)

ネストされた辞書
ネストされた辞書とは、以下のように辞書の中に辞書(要素の値が辞書になっている)があるものです。
pikori_status = {
"HP": 120,
"MP": 45,
"装備": {
"武器": "鉄の剣",
"防具": "革の盾"
},
"スキル": {
"火炎斬り": "Lv2",
"回復魔法": "Lv1"
}
}
"装備"
や "スキル"
の値がさらに辞書になっていて、情報が階層的に整理されています。
このように、辞書の中に辞書を入れることで、階層的なデータ構造が作れます。ネストされた辞書は、以下のようにJSON形式のデータ構造とほぼ同じです。
■JSON形式
{
"HP": 120,
"MP": 45,
"装備": {
"武器": "鉄の剣",
"防具": "革の盾"
},
"スキル": {
"火炎斬り": "Lv2",
"回復魔法": "Lv1"
}
}
つまり、JSON形式のデータを扱うときにネストされた辞書がよく使われます。ネストされた辞書の値へアクセスするには、以下コードのように、 辞書["キー1"]["キー2"]
や辞書["キー1"].get("キー2")
のように、階層を順番にたどります。
pikori_status = {
"HP": 120,
"MP": 45,
"装備": {
"武器": "鉄の剣",
"防具": "革の盾"
},
"スキル": {
"火炎斬り": "Lv2",
"回復魔法": "Lv1"
}
}
# 武器の名前を取得
print("勇者ぴこりの武器:", pikori_status["装備"]["武器"])
# スキルのレベルを確認
print("勇者ぴこりの火炎斬り:", pikori_status["スキル"].get("火炎斬り", "Lv0"))
print("勇者ぴこりの回復魔法:", pikori_status.get("スキル", {}).get("回復魔法", "Lv0"))
勇者ぴこりの火炎斬り: Lv2
勇者ぴこりの回復魔法: Lv1
上記コードのように、ネストされた辞書の値を取得する際、 get()
の連続使用ができますが、最初の辞書が存在しない場合、空の辞書 {} を返すようにします。これで、どのキーが欠けていてもエラーにならず、デフォルト値で処理できるため、安全なコードとなります。

参照共有・浅いコピー・深いコピー
Pythonでは、辞書型のデータをコピーする方法が3つありますが、動作がまったく異なる**ので注意が必要です。
方法 | コピーの種類 | 特徴 |
---|---|---|
= で代入 |
参照共有(コピーではない) | 元の辞書と同じものを指す |
copy() メソッド |
浅いコピー(shallow copy) | 一階層目だけ複製、ネストされた辞書は共有される |
copy.deepcopy() 関数 |
深いコピー(deep copy) | 全階層を完全に複製、完全に独立した辞書になる |
以下のコードは、 =
で代入した場合(参照が共有される)の例です。
pikori_items = {
"回復薬": 5,
"装備": {
"武器": "鉄の剣",
"防具": "革の盾"
}
}
# 持ち物を複製
copy_items = pikori_items
# 複製側を変更
copy_items["回復薬"] = 99
print("勇者ぴこりの持ち物:", pikori_items)
print("勇者ぴこりの持ち物のコピー:", copy_items)
勇者ぴこりの持ち物のコピー: {‘回復薬’: 99, ‘装備’: {‘武器’: ‘鉄の剣’, ‘防具’: ‘革の盾’}}
=
で代入すると、元の辞書と同じものを指す(両方が同じ辞書を共有)するため、コピー先の辞書を変更すると、コピー元の辞書も変わってしまいます。(回復薬が両方とも99になっている)
以下のコードは、 copy()
を使って浅いコピーをする例です。
pikori_items = {
"回復薬": 5,
"装備": {
"武器": "鉄の剣",
"防具": "革の盾"
}
}
# 持ち物を複製(浅いコピー)
copy_items = pikori_items.copy()
# 複製側を変更
copy_items["回復薬"] = 99
copy_items["装備"] ["武器"] = "鋼の剣"
print("勇者ぴこりの持ち物:", pikori_items)
print("勇者ぴこりの持ち物のコピー:", copy_items)
勇者ぴこりの持ち物のコピー: {‘回復薬’: 99, ‘装備’: {‘武器’: ‘鋼の剣’, ‘防具’: ‘革の盾’}}
実行結果では、回復薬はコピーだけが99に変更されましたが、武器は両方とも「鋼の剣」に変わってしまっています。copy()
メソッドは、一階層目だけ複製しますが、ネストされた辞書は共有されるためです。 ネストされた辞書も複製する場合、以下コードのように、copy.deepcopy()
を使います。
import copy
pikori_items = {
"回復薬": 5,
"装備": {
"武器": "鉄の剣",
"防具": "革の盾"
}
}
# 持ち物を複製(深いコピー)
copy_items = copy.deepcopy(pikori_items)
# 複製側を変更
copy_items["回復薬"] = 99
copy_items["装備"] ["武器"] = "鋼の剣"
print("勇者ぴこりの持ち物:", pikori_items)
print("勇者ぴこりの持ち物のコピー:", copy_items)
勇者ぴこりの持ち物のコピー: {‘回復薬’: 99, ‘装備’: {‘武器’: ‘鋼の剣’, ‘防具’: ‘革の盾’}}

for文で要素の取得
以下コードのように、 for
文を使えば辞書から順番に要素を取得できます。
pikori_status = {
"HP": 120,
"MP": 45,
"装備": {
"武器": "鉄の剣",
"防具": "革の盾"
},
"スキル": {
"火炎斬り": "Lv2",
"回復魔法": "Lv1"
}
}
# スキル一覧を表示
print("勇者ぴこりのスキル一覧:")
for skill_name, level in pikori_status["スキル"].items():
print(f"・{skill_name}({level})")
・火炎斬り(Lv2)
・回復魔法(Lv1)
items()
で、キー(スキル名)と値(レベル)をセットで取り出し、 for文で先頭からf"文字列"
の形式で、変数を埋め込んだ表示**しています。
練習問題(辞書型の基礎固め & 資格勉強用)
本ページで学んだ内容の基礎固め、また「Python 3 エンジニア認定基礎試験」や「基本情報技術者試験」などの資格対策にも役立つ練習問題を作成しました。
【問題1】辞書型の定義(難易度★☆☆☆☆)
次のうち、Pythonで辞書型を定義する正しい方法を選びなさい。
A. data = ["勇者", "戦士", "Lv5"]
B. data = ("勇者", "戦士", "Lv5")
C. data = {"職業": "戦士", "レベル": 5}
D. data = <"職業": "戦士", "レベル": 5>
解説:辞書型は中括弧 `{}` を使い、キーと値のペアで定義します。
【問題2】要素数の取得(難易度★☆☆☆☆)
次のコードの出力結果として正しいものを選びなさい。
items = {"剣": 1, "盾": 1, "回復薬": 5}
print(len(items))
A. 3
B. 5
C. 6
D. エラーになる
解説:`len()` は辞書のキーの数(ペアの数)を返します。
【問題3】辞書の要素追加(難易度★☆☆☆☆)
次のコードの実行後の辞書の内容として正しいものを選びなさい。
data = {"HP": 100}
data["MP"] = 50
A. {"HP": 100}
B. {"MP": 50}
C. {"HP": 100, "MP": 50}
D. {"HP": 50, "MP": 100}
解説:新しいキー `”MP”` に値 `50` を代入することで、辞書に追加されます。
【問題4】辞書の連結(難易度★★☆☆☆)
次のコードの実行結果として正しいものを選びなさい。
a = {"A": 1}
b = {"B": 2}
a.update(b)
print(a)
A. {"A": 1}
B. {"B": 2}
C. {"A": 1, "B": 2}
D. {"A": 2, "B": 1}
解説:`update()` メソッドで辞書 `b` の内容が `a` に追加されます。
【問題5】辞書の削除(難易度★★☆☆☆)
次のコードの出力として正しいものを選びなさい。
data = {"剣": 1, "盾": 1}
del data["剣"]
print(data)
A. {"剣": 1}
B. {"盾": 1}
C. {"剣": 1, "盾": 1}
D. エラーになる
解説:`del` 文で `”剣”` のキーと値が削除されます。
【問題6】キーの存在確認(難易度★★☆☆☆)
次のコードの出力として正しいものを選びなさい。
data = {"魔法": "Lv2"}
print("魔法" in data)
A. True
B. False
C. “魔法”
D. エラーになる
解説:`in` 演算子でキーの存在を確認できます。存在すれば `True` を返します。
【問題7】値の取得(getメソッド)(難易度★★★☆☆)
次のコードの出力として正しいものを選びなさい。
data = {"魔法": "Lv2"}
print(data.get("回復", "なし"))
A. "Lv2"
B. "回復"
C. "なし"
D. エラーになる
解説:`get()` はキーが存在しない場合、指定したデフォルト値 `”なし”` を返します。
【問題8】辞書のコピー(難易度★★★☆☆)
次のコードの実行後、a
の内容として正しいものを選びなさい。
original = {"HP": 100}
a = original.copy()
a["HP"] = 50
print(original)
A. {"HP": 50}
B. {"HP": 100}
C. {"HP": 150}
D. エラーになる
解説:`copy()` は元の辞書とは独立したコピーを作るため、元の値は変更されません。
【問題9】ネストされた辞書のアクセス(難易度★★★★☆)
次のコードの出力として正しいものを選びなさい。
status = {
"装備": {
"武器": "鉄の剣"
}
}
print(status["装備"]["武器"])
A. "鉄の剣"
B. "装備"
C. "武器"
D. エラーになる
解説:ネストされた辞書は、階層を順にたどってアクセスします。
【問題10】辞書の値の更新(難易度★★☆☆☆)
次のコードの実行結果として正しいものを選びなさい。
data = {"HP": 100}
data["HP"] = 150
print(data)
A. {"HP": 100}
B. {"HP": 150}
C. {"HP": 250}
D. エラーになる
解説:既存のキー `”HP”` に新しい値 `150` を代入することで、値が上書きされます。
【問題11】辞書の値の取得([]とgetの違い)(難易度★★★☆☆)
次のコードの出力として正しいものを選びなさい。
data = {"MP": 30}
print(data["HP"])
A. None
B. "HP"
C. エラーになる
D. "MP"
解説:`[]` で存在しないキーを指定すると `KeyError` が発生します。安全に取得したい場合は `get()` を使います。
【問題12】辞書の全キー取得(keysメソッド)(難易度★★☆☆☆)
次のコードの出力として正しいものを選びなさい。
data = {"剣": 1, "盾": 1}
print(list(data.keys()))
A. ["剣", "盾"]
B. ["1", "1"]
C. ["data"]
D. エラーになる
解説:`keys()` は辞書のキー一覧を返します。`list()` でリスト型に変換しています。
【問題13】辞書の全値取得(valuesメソッド)(難易度★★☆☆☆)
次のコードの出力として正しいものを選びなさい。
data = {"剣": 1, "盾": 2}
print(list(data.values()))
A. [1, 2]
B. ["剣", "盾"]
C. ["1", "2"]
D. エラーになる
解説:`values()` は辞書の値一覧を返します。`list()` でリスト型に変換しています。
【問題14】辞書のキーと値の同時取得(itemsメソッド)(難易度★★★☆☆)
次のコードの出力として正しいものを選びなさい。
data = {"剣": 1, "盾": 2}
for k, v in data.items():
print(k, v)
A. "剣" "盾"
B. 1 2
C. 剣 1
と 盾 2
が順に表示される
D. エラーになる
解説:`items()` はキーと値のペアをタプルで返すため、`for` 文で同時に取り出せます。
【問題15】辞書のクリア(clearメソッド)(難易度★★☆☆☆)
次のコードの出力として正しいものを選びなさい。
data = {"剣": 1, "盾": 2}
data.clear()
print(data)
A. {"剣": 1, "盾": 2}
B. {}
C. None
D. エラーになる
解説:`clear()` メソッドは辞書のすべての要素を削除します。
【問題16】辞書のコピー(難易度★★★★☆)
次のコードの出力として正しいものを選びなさい。
original = {"HP": 100}
copy = original
copy["HP"] = 50
print(original)
A. {"HP": 100}
B. {"HP": 50}
C. {"HP": 150}
D. エラーになる
解説:`=` で代入すると、元の辞書とコピー先が同じ参照を持つため、変更が反映されます。
【問題17】ネストされた辞書の安全なアクセス(難易度★★★★☆)
次のコードの出力として正しいものを選びなさい。
status = {
"装備": {
"武器": "鉄の剣"
}
}
print(status.get("スキル", {}).get("火炎斬り", "なし"))
A. "鉄の剣"
B. "火炎斬り"
C. "なし"
D. エラーになる
解説:`get()` を連続して使うことで、存在しないキーでも安全にデフォルト値を返せます。
【問題18】辞書のキーに使える型(難易度★★★☆☆)
次のうち、辞書のキーとして使える型をすべて選びなさい。
A. 文字列
B. 数値
C. リスト
D. タプル
解説:辞書のキーには「変更不可な型(イミュータブル)」のみ使用可能です。リストは変更可能なため不可。
【問題19】辞書の値に使える型(難易度★★☆☆☆)
次のうち、辞書の「値」として使える型をすべて選びなさい。
A. 文字列
B. 数値
C. リスト
D. 辞書
解説:辞書の「値」にはどんな型でも使えます。文字列・数値・リスト・辞書など、柔軟に格納可能です。
【問題20】辞書のネストとfor文(難易度★★★★☆)
次のコードの出力として正しいものを選びなさい。
skills = {
"ぴこり": {
"火炎斬り": "Lv2",
"回復魔法": "Lv1"
}
}
for name, skillset in skills.items():
for skill, level in skillset.items():
print(f"{name}の{skill}:{level}")
A. ぴこりの火炎斬り:Lv2
と ぴこりの回復魔法:Lv1
が順に表示される
B. 火炎斬り Lv2
のみ表示される
C. ぴこり Lv2
と ぴこり Lv1
が表示される
D. エラーになる
解説:ネストされた辞書を `for` 文で2段階に回すことで、キャラクター名とスキル名・レベルを組み合わせて表示できます。
課題(実践力強化用)
Pythonプログラミングの実践力を強化したい人向けの課題を用意しました。仕様通りに動くプログラムを書いたり、エラーメッセージを読んでコードを修正するという作業は、プログラミングおいて重要ですので、初心者の方は是非チャレンジしてみてください。
課題① コード作成(難易度★★☆☆☆)
以下の仕様を満たす辞書を作成し、キー "武器"
の値を表示してください。
- 辞書名は
equipment
"武器"
に"鉄の剣"
、"防具"
に"革の盾"
を格納するprint()
を使って"鉄の剣"
を表示する
仕様を満たすコードは次のようになります。
equipment = { "武器": "鉄の剣", "防具": "革の盾" } print(equipment["武器"])
課題② コード修正(難易度★★★☆☆)
以下のコードを実行するとエラーが表示されます。
コードを修正して "Lv2"
を正しく表示してください。
skills = {
"火炎斬り": Lv2
}
print(skills["火炎斬り"])
■実行結果(エラーメッセージ: name ‘Lv2’ is not defined)
Traceback (most recent call last):
File "sample.py", line 2, in <module>
"火炎斬り": Lv2
NameError: name 'Lv2' is not defined
解説: `”Lv2″` は文字列として扱う必要があります。Pythonでは文字列は `”` または `’` で囲みます。
■修正後のコード
skills = { "火炎斬り": "Lv2" } print(skills["火炎斬り"])
課題③ ネストされた辞書のアクセス(難易度★★★☆☆)
以下の辞書から "防具"
の値を取り出して表示してください。
status = {
"装備": {
"武器": "鉄の剣",
"防具": "革の盾"
}
}
解説: ネストされた辞書は、階層を順にたどってアクセスします。
print(status["装備"]["防具"])
課題④ キーの存在確認(難易度★★☆☆☆)
以下のコードを完成させて、"魔法"
が辞書に存在するかどうかを判定してください。
存在すれば "使える"
、存在しなければ "未習得"
と表示すること。
skills = {
"火炎斬り": "Lv2"
}
解説: `in` 演算子を使ってキーの存在を確認できます。
if "魔法" in skills: print("使える") else: print("未習得")
課題⑤ 安全な値取得(難易度★★★☆☆)
以下のコードを完成させて、"回復魔法"
のレベルを安全に取得してください。
存在しない場合は "Lv0"
を表示すること。
skills = {
"火炎斬り": "Lv2"
}
解説: `get()` メソッドを使えば、存在しないキーでもデフォルト値を返せます。
print(skills.get("回復魔法", "Lv0"))
課題⑥ 辞書のループ処理(難易度★★★☆☆)
以下の辞書を for
文で回して、アイテム名と個数を1行ずつ表示してください。
items = {
"回復薬": 5,
"鉄の剣": 1,
"魔法の書": 2
}
鉄の剣:1
魔法の書:2
解説: `items()` を使うことで、キーと値をセットで取り出せます。
items = { "回復薬": 5, "鉄の剣": 1, "魔法の書": 2 } for name, count in items.items(): print(f"{name}:{count}")
課題⑦ ネストされた辞書のループ(難易度★★★★☆)
以下の辞書から、キャラクター名とそのスキル一覧を表示してください。
characters = {
"ぴこり": {
"火炎斬り": "Lv2",
"回復魔法": "Lv1"
},
"ルーナ": {
"氷結魔法": "Lv3"
}
}
ぴこりの回復魔法:Lv1
ルーナの氷結魔法:Lv3
解説: ネストされた辞書は、`for` 文を2段階に分けて回します。
characters = { "ぴこり": { "火炎斬り": "Lv2", "回復魔法": "Lv1" }, "ルーナ": { "氷結魔法": "Lv3" } } for name, skills in characters.items(): for skill, level in skills.items(): print(f"{name}の{skill}:{level}")
課題⑧ APIレスポンスの整形(難易度★★★★☆)
以下は気象庁APIから取得した天気情報の辞書です。
このデータを使って、"targetArea"
と "headlineText"
を1行で表示してください。
weather = {
"publishingOffice": "気象庁",
"targetArea": "兵庫県南部",
"headlineText": "晴れ時々くもり"
}
解説: 必要なキーを `[]` で指定して取り出し、`f文字列` で整形します。
weather = { "publishingOffice": "気象庁", "targetArea": "兵庫県南部", "headlineText": "晴れ時々くもり" } print(f"{weather['targetArea']}:{weather['headlineText']}")
課題⑨ APIレスポンスの安全な整形(難易度★★★★☆)
以下の辞書は、Web APIから取得した作品情報です。
"タイトル"
と "作者"
が存在する場合のみ表示し、なければ "不明"
と表示してください。
book_data = {
"作品ID": 123456
}
作者:不明
解説: get()
メソッドを使えば、キーが存在しない場合でも安全にデフォルト値を返せます。
book_data = { "作品ID": 123456 } print(f"タイトル:{book_data.get('タイトル', '不明')}") print(f"作者:{book_data.get('作者', '不明')}")
課題⑩ APIレスポンスのリスト整形(難易度★★★★★)
以下の辞書は、Web APIから取得した複数作品の情報です。
すべての "タイトル"
を1行ずつ表示してください。
book_list = {
"作品": [
{"タイトル": "幻想の森"},
{"タイトル": "月光の祈り"},
{"タイトル": "空想都市"}
]
}
月光の祈り
空想都市
解説: リスト内の辞書を for
文で回し、各 "タイトル"
を取り出します。
book_list = { "作品": [ {"タイトル": "幻想の森"}, {"タイトル": "月光の祈り"}, {"タイトル": "空想都市"} ] } for work in book_list["作品"]: print(work.get("タイトル", "不明"))
関連ページ(もっと学びたい人へ)
Pythonの基礎から応用例まで、以下ページから学ぶことができます。
