【Python】レッスン4-11:辞書の基本を理解しよう

ながみえ
【Python学習記事のアイキャッチ画像】Lesson4-11 辞書の定義と基本操作を理解しよう

一つ前のLessonではタプルのアンパックについて学習しました。

今回は辞書の基本について見ていきましょう。

Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:関数とスコープ編

Lesson4:データ構造編
・Lesson4-1:リストの定義と要素の追加を理解しよう
・Lesson4-2:リストの要素を削除しよう
・Lesson4-3:リストの情報を調べよう
・Lesson4-4:リストの集計・並べ替えを理解しよう
・Lesson4-5:リストのスライスを理解しよう
・Lesson4-6:リストのループ処理を理解しよう
・Lesson4-7:リストの内包表記を理解しよう
・Lesson4-8:リスト・タプル・辞書・集合の概要と違いを理解しよう
・Lesson4-9:タプルの基本を理解しよう
・Lesson4-10:タプルのアンパックを理解しよう
・Lesson4-11:辞書の基本を理解しよう ◁今回はココ
・Lesson4-12:辞書のループ処理を理解しよう
・Lesson4-13:辞書の内包表記を使ってリストから辞書を作ろう
・Lesson4-13:集合(セット)の基本を理解しよう
・練習問題4-1:宝探しゲームを作ろう
・練習問題4-2:ナインゲームを作ろう 
・練習問題4-3:マルバツゲームを作ろう
Lesson5:オブジェクト指向編
次のステップ:Python基礎習得者にお勧めの道5選(実務or副業)

<<前のページ

【Python学習記事のアイキャッチ画像】Lesson4-10 タプルのアンパックとネストを理解しよう

Pythonの記事一覧

Python学習カテゴリの親ページ用アイキャッチ画像(テキスト&問題集)、記事一覧へのリンク案内

次のページ>>

【Python学習記事のアイキャッチ画像】Lesson4-12 辞書のループ処理を理解しよう

辞書の基本と操作の全体像|作成・編集・走査

辞書(dictは、キーと値の組み合わせでデータを管理するための基本データ構造です。

{キー: 値} の形で定義し、キーを指定して高速に参照・更新・削除できます。

この知識を身につけると、ID → ユーザー情報の参照、設定値の管理など、実務でも頻出の処理を短く・意図が伝わる形で書けるようになります。

読み終える頃には、辞書で「何をキーにして、どんな値を持たせるか」を自信を持って設計できるはずです。さっそく定義の基本から見ていきましょう。

【Python】勉強猫がノートパソコンを前にして学習を始める様子。記事内の学習スタート用イラスト

辞書とは何か|構造と使い方の最初の一歩

Pythonの辞書(dictionary)は、キーとそれに対応する値を組み合わせて格納するデータ構造です。

ユーザー情報などを記録することを考えると分かりやすいでしょう。

キー
名前Python太郎
年齢30
出身地東京

辞書はPythonの組み込みデータ型の一つで、他のプログラミング言語における「ハッシュマップ」や「連想配列」とも似た概念です。

リストやタプルが順序付きのデータを保持するのに対し、辞書は順序に関係なくキーを使用して値にアクセスできるのが特徴です。

辞書は波括弧 {} を使って作成します。

中に「 キー : 値 」のペアをコンマで区切って記述します。キーは一意でなければならず、通常は文字列や数値が使われますが、タプルのような不変オブジェクトもキーとして使用可能です。

一方、値はどんなデータ型でも指定できます。辞書を作成する基本的な例を以下に示します。

# キーと値を持つ辞書を作成し、変数personに代入
person = {
    'name': 'Python太郎',
    'age': 30,
    'city': 'Tokyo'
}

print(person)

このコードを実行すると以下のように出力されます。

{'name': 'Alice', 'age': 30, 'city': 'Tokyo'}

この例ではpersonという辞書を作成し、「name」というキーに「Alice」という値を、「age」というキーに数値の30を、「city」というキーに「Tokyo」という値を割り当てています。

辞書の操作方法|要素の追加、削除、更新

辞書は作成後に簡単に操作することができます。代表的な操作には、要素の追加、削除、更新が含まれます。

要素の追加|角括弧による指定

辞書に新しいキーと値を追加する場合、角括弧[]を用いて以下のように記述します。

person = { 'name': 'Alice', 'age': 30, 'city': 'Tokyo' }

# 職業を追加
person['job'] = 'Engineer' # キー:job、値:Engineerとして辞書登録
print(person)

このコードを実行すると以下のように出力されます。

{'name': 'Alice', 'age': 30, 'city': 'Tokyo', 'job': 'Engineer'}

要素の削除|del と pop の違いと使い方

辞書からキーとその値を削除するには、delキーワードpop()メソッド を使います。

person = { 'name': 'Alice', 'age': 30, 'city': 'Tokyo', 'job': 'Engineer' }

# キー 'age' の要素を削除
del person['age']

# 'city' キーの値を取得しながら削除
city = person.pop('city')
print(person)
print(city)

このコードを実行すると以下のように出力されます。

{'name': 'Alice', 'job': 'Engineer'}
Tokyo

要素の更新|角括弧による指定

既存のキーの値を更新することも可能です。

person = { 'name': 'Alice', 'job': 'Engineer' }

# キー 'name' の値を更新
person['name'] = 'Bob'
print(person)

このコードを実行すると以下のように出力されます。

{'name': 'Bob', 'job': 'Engineer'}

辞書の中身をループ処理する例|items()メソッドの使い方

実際に辞書を使用してデータを管理するケースを見てみましょう。

以下のコードは辞書を使って複数の人のデータを管理する例です。 items()メソッド を使って辞書のキーと値を同時に取得し、ループ処理で情報を表示しています。

people = {
    'Alice': {'age': 30, 'city': 'Tokyo'},
    'Bob': {'age': 25, 'city': 'Osaka'},
    'Charlie': {'age': 35, 'city': 'Nagoya'}
}

# 辞書の中身をループ処理で表示
for name, info in people.items():	# 2つの変数に、キーと値をそれぞれ順次代入
    print(f"{name} is {info['age']} years old and lives in {info['city']}.")

このコードを実行すると以下のように出力されます。

Alice is 30 years old and lives in Tokyo.
Bob is 25 years old and lives in Osaka.
Charlie is 35 years old and lives in Nagoya.

この例ではpeopleという辞書を使い、それぞれの人に対する年齢と居住地の情報を管理しています。

まとめ|キーと値で設計し、追加・更新・走査を使いこなそう

辞書はキーと値のペアを使ってデータを管理する非常に便利なデータ構造です。

Pythonでは要素の追加、削除、更新が簡単に行えるため、効率的にデータを扱うことができます。

辞書の基本操作をマスターすることで複雑なデータ管理も容易になりますので、ぜひ実際にコードを書いて辞書の操作に慣れてください。

Q
サイト改善アンケート|ご意見をお聞かせください(1分で終わります)

本サイトでは、みなさまの学習をよりサポートできるサービスを目指しております。
そのため、みなさまの「プログラミングを学習する理由」などをアンケート形式でお伺いしています。

1分だけ、ご協力いただけますと幸いです。

【Python】サイト改善アンケート
1.このサイトをどのように活用していますか?また、今後どのように活用したいですか?
5.気になっているサービス・商品があれば教えてください。
(複数選択可)
※ 特定の記事に関する内容の場合は、記事番号(Python Lesson〇-〇)をご記入願います。 また、ご質問はここではなく問い合わせフォームからお願いします。

練習問題:辞書を使ってみよう

この記事で学習した「辞書」を復習する練習問題に挑戦しましょう。

【Python】勉強猫がノートパソコンに向かい、練習問題に挑戦する様子。記事内の休憩用イラスト

問題|商品在庫管理プログラムを作成しよう

商品在庫を管理するプログラムを作成して、辞書の基本操作を学びましょう。

このプログラムでは商品の価格や在庫数を管理します。新しい商品を追加したり、在庫を更新したり、不要な商品を削除する機能を実装します。

以下の要件に従ってコードを完成させてください。

  • 商品の在庫管理をするための辞書 inventory を作成し、商品名、価格、在庫数を設定すること。商品は「りんご、バナナ、みかん」とする。
  • 新しい商品「ぶどう」を追加し、価格と在庫数を設定すること。
  • 既存の商品「りんご」の在庫数を40に更新すること。
  • 商品「バナナ」を在庫から削除すること。
  • 最後に、すべての商品の名前、価格、在庫数を表示すること。

ただし、以下のような実行結果となるコードを書くこと。

初期の在庫: {'りんご': {'価格': 100, '在庫数': 50}, 'バナナ': {'価格': 80, '在庫数': 30}, 'みかん': {'価格': 60, '在庫数': 100}}
ぶどうを追加した後の在庫: {'りんご': {'価格': 100, '在庫数': 50}, 'バナナ': {'価格': 80, '在庫数': 30}, 'みかん': {'価格': 60, '在庫数': 100}, 'ぶどう': {'価格': 120, '在庫数': 25}}
りんごの在庫数を更新した後の在庫: {'りんご': {'価格': 100, '在庫数': 40}, 'バナナ': {'価格': 80, '在庫数': 30}, 'みかん': {'価格': 60, '在庫数': 100}, 'ぶどう': {'価格': 120, '在庫数': 25}}
バナナを削除した後の在庫: {'りんご': {'価格': 100, '在庫数': 40}, 'みかん': {'価格': 60, '在庫数': 100}, 'ぶどう': {'価格': 120, '在庫数': 25}}
最終的な在庫状況:
りんご: 価格 = 100円, 在庫数 = 40個
みかん: 価格 = 60円, 在庫数 = 100個
ぶどう: 価格 = 120円, 在庫数 = 25個

ヒント|難しいと感じる人だけ見よう

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

Q
ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。

1:入れ子の辞書で初期在庫を定義し、現在の在庫全体を確認表示する
 ・外側は商品名をキーにする辞書、内側は価格と在庫数をキーにする辞書の二重構造
 ・最後にラベル付きで在庫全体を表示する

2:新規追加→在庫数の更新→削除を順に行い、各操作後の在庫を確認表示する処理
 ・追加:存在しない商品名のキーに、{'価格': 数値, '在庫数': 数値} を代入して登録する
 ・更新:入れ子の辞書を外側のキー→内側のキーの順で辿って在庫数を上書きする
 ・削除:不要な商品名のキーを削除構文で取り除く

3:在庫辞書を走査し、商品名・価格・在庫数を整形して一覧表示する処理
 ・items() を使うと、商品名(キー)と詳細(値)を同時に取り出せる
 ・ループ内で、詳細辞書から ‘価格’ と ‘在庫数’ をキーで参照する

Q
ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

# 商品の在庫を表す辞書
''' (穴埋め)inventory を定義する:商品名をキー、値は {'価格': 整数, '在庫数': 整数} のネスト辞書(りんご/バナナ/みかん)を作成する '''

# 辞書の内容を表示
print("初期の在庫:", inventory)

# 新しい商品を追加
inventory['''(穴埋め)'''] = {'価格': 120, '在庫数': 25}
print("ぶどうを追加した後の在庫:", inventory)

# 既存の商品(りんご)の在庫数を更新
inventory['りんご']['''(穴埋め)'''] = 40
print("りんごの在庫数を更新した後の在庫:", inventory)

# 商品(バナナ)を削除
'''(穴埋め)''' inventory['バナナ']
print("バナナを削除した後の在庫:", inventory)

# 在庫の状態をループで表示
print("最終的な在庫状況:")
for item, details in inventory.'''(穴埋め)'''():
    print(f"{item}: 価格 = {details['''(穴埋め)''']}円, 在庫数 = {details['在庫数']}個")

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

解答例|在庫辞書の基本操作プログラム

例えば以下のようなプログラムが考えられます。

Q
正解コード
# 商品の在庫を表す辞書
inventory = {
    'りんご': {'価格': 100, '在庫数': 50},
    'バナナ': {'価格': 80, '在庫数': 30},
    'みかん': {'価格': 60, '在庫数': 100}
}

# 辞書の内容を表示
print("初期の在庫:", inventory)

# 新しい商品を追加
inventory['ぶどう'] = {'価格': 120, '在庫数': 25}
print("ぶどうを追加した後の在庫:", inventory)

# 既存の商品(りんご)の在庫数を更新
inventory['りんご']['在庫数'] = 40
print("りんごの在庫数を更新した後の在庫:", inventory)

# 商品(バナナ)を削除
del inventory['バナナ']
print("バナナを削除した後の在庫:", inventory)

# 在庫の状態をループで表示
print("最終的な在庫状況:")
for item, details in inventory.items():
    print(f"{item}: 価格 = {details['価格']}円, 在庫数 = {details['在庫数']}個")

解答例の解説|在庫辞書の基本操作プログラムの考え方

解答例の詳細解説は以下の通りです。

Q
詳細解説

入れ子の辞書で初期在庫を定義

# 商品の在庫を表す辞書
inventory = {
    'りんご': {'価格': 100, '在庫数': 50},
    'バナナ': {'価格': 80, '在庫数': 30},
    'みかん': {'価格': 60, '在庫数': 100}
}

# 辞書の内容を表示
print("初期の在庫:", inventory)

まず、商品名を見出しとして使える入れ物を用意し、その中に価格と在庫数という2つの情報をひとまとめにして保存します。
こうした「入れ物の中に入れ物がある」形にしておくと、あとから特定の商品や特定の項目だけを簡単に取り出したり更新できます。
準備ができたら、いま登録されている在庫の全体像を、分かりやすいラベル付きで画面に表示して確認します。

辞書の操作

# 新しい商品を追加
inventory['ぶどう'] = {'価格': 120, '在庫数': 25}
print("ぶどうを追加した後の在庫:", inventory)

# 既存の商品(りんご)の在庫数を更新
inventory['りんご']['在庫数'] = 40
print("りんごの在庫数を更新した後の在庫:", inventory)

# 商品(バナナ)を削除
del inventory['バナナ']
print("バナナを削除した後の在庫:", inventory)

商品名を見出しとして使い、その中に価格と在庫数をセットで入れます。
つぎに、既存商品の在庫数だけを変更します。
入れ子構造になっているため、外側で商品を特定してから内側の在庫数に上書きします。
最後に、不要になった商品を在庫から取り除きます。
これらの操作のたびに、いまの在庫全体をラベル付きで表示し、変更が正しく反映されたかを目で確認します。

在庫辞書を走査し、一覧表示

# 在庫の状態をループで表示
print("最終的な在庫状況:")
for item, details in inventory.items():
    print(f"{item}: 価格 = {details['価格']}円, 在庫数 = {details['在庫数']}個")

在庫の入れ子辞書から、商品名とその詳細を1件ずつ取り出して、人が読みやすい形に並べて表示します。
外側は商品名、内側は価格と在庫数を持つ小さな辞書です。
走査しながら、内側の辞書から必要な値を取り出し、ラベルや単位を付けて1行ずつ出力します。
これで直前までに行った追加・更新・削除の結果が、最終的にどう反映されているかを一覧で確認できます。

もっと分かりやすい学習サイトにするために

この記事を読んで「ここが分かりにくかった」「ここが難しかった」等の意見を募集しています。

世界一わかりやすいPython学習サイトにするため、ぜひ 問い合わせフォーム からご意見下さい。

<<前のページ

【Python学習記事のアイキャッチ画像】Lesson4-10 タプルのアンパックとネストを理解しよう

Pythonの記事一覧

Python学習カテゴリの親ページ用アイキャッチ画像(テキスト&問題集)、記事一覧へのリンク案内

次のページ>>

【Python学習記事のアイキャッチ画像】Lesson4-12 辞書のループ処理を理解しよう

辞書の基本の疑問解消|FAQと用語のまとめ

初心者がつまずきやすいポイントをFAQとしてまとめ、またよく使う専門用語をわかりやすく整理しました。

理解を深めたいときや、ふと疑問に感じたときに役立ててください。

FAQ|辞書の基本に関するよくある質問

Q
Q1. キーの重複はどうなりますか?

Pythonの辞書では同じキーは一つしか持てません。重複した場合、後から代入した値が有効になります。

Q
Q2. 辞書のキーに使える型の制限はありますか?

キーにはイミュータブルな型(数値、文字列、タプルなど)のみ使用可能です。リストや辞書など可変型はキーにできません。

Q
Q3. 存在しないキーにアクセスするとどうなりますか?

KeyErrorが発生します。これを避けるにはget()メソッドを使うか、キーの存在を事前にinで確認しましょう。

Python用語集|辞書の基本に関する用語一覧

今回の記事で出てきた用語・関数などを一覧で紹介します。

このサイトに出てくる 全てのPython用語をまとめた用語集 も活用してください。

Python用語定義・使い方の概要解説記事へのリンク
辞書キーと値のペアを保持するデータ構造。順序付きで検索や更新が高速に行える。波括弧 {} で定義される本記事
del ステートメント指定した辞書のキーとその値を削除したり、変数自体を削除したりするためのステートメントLesson4-2
pop() メソッド指定したキーに対応する値を取得し、そのキーと値を辞書から削除するメソッドLesson4-2
記事URLをコピーしました