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

記事内に商品プロモーションを含む場合があります

この記事で学べる知識:辞書の定義と基本操作

この記事の練習問題で使用する知識:
レッスン1~3の知識リストの定義と要素追加リストの要素削除リストの情報出力リストの集計・並べ替えリストのスライスリストのループ処理リストの内包表記タプルの定義と基本操作タプルのアンパックとネスト辞書の定義と基本操作辞書のループ処理辞書の内包表記集合の定義と基本操作

<<前の問題 問題集Top 次の問題>>

Pythonの「辞書(dictionary)」とは

この章ではPythonにおける「辞書(dictionary)」の意味や使い方を学習します。必要ない方はここをクリックして練習問題へ飛びましょう。



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

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

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

辞書の作成方法

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

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

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

# 空の辞書を作成
empty_dict = {}

# キーと値を持つ辞書を作成
person = {
    'name': 'Alice',
    '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' # 職業を追加
print(person)

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

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

要素の削除

辞書からキーとその値を削除するには、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'}

辞書の使用例

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

以下は、辞書を使って複数の人のデータを管理する例です。

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

# 辞書の中身をループ処理で表示
for name, info in people.items():
    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という辞書を使い、それぞれの人に対する年齢と居住地の情報を管理しています。

またitems()メソッドを使って辞書のキーと値を同時に取得し、ループ処理で情報を表示しています。

まとめ

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

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

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

練習問題4-11:商品在庫管理プログラムを作成しよう

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

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

この問題の要件

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

  • 商品の在庫管理をするための辞書 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からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

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

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:変数inventoryに、商品名、価格、在庫数を格納した辞書を定義
2:print関数で「初期の在庫:」と辞書inventoryの内容を表示
3:変数inventoryに「ぶどう」をキーとし、その価格と在庫数を追加
4:print関数で「ぶどうを追加した後の在庫:」と辞書inventoryの内容を表示
5:辞書inventory内の「りんご」の在庫数を40に更新
6:print関数で「りんごの在庫数を更新した後の在庫:」と辞書inventoryの内容を表示
7:del文で辞書inventory内の「バナナ」を削除
8:print関数で「バナナを削除した後の在庫:」と辞書inventoryの内容を表示
9:for文で辞書inventory内のすべてのキーとその値を順番に取り出し、商品名、価格、在庫数を表示

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

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

# 辞書の定義と基本操作を学習するための在庫管理システム

# 商品の在庫を表す辞書
"""
【穴埋め問題1】
ここに、商品名、価格、在庫数を格納した辞書を作成するコードを書いてください。
"""

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

# 新しい商品を追加
"""
【穴埋め問題2】
ここに、新しい商品「ぶどう」を追加するコードを書いてください。
"""

# 既存の商品(りんご)の在庫数を更新
"""
【穴埋め問題3】
ここに、「りんご」の在庫数を40に更新するコードを書いてください。
"""

# 商品(バナナ)を削除
"""
【穴埋め問題4】
ここに、「バナナ」を削除するコードを書いてください。
"""

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

 

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



解答例と解説

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

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

# 辞書の定義と基本操作を学習するための在庫管理システム

# 商品の在庫を表す辞書
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['在庫数']}個")

正解コードの解説

このコードは辞書の定義と基本操作を学ぶためのシンプルな在庫管理システムです。

以下に各部分の解説を示します。

辞書の定義

inventory = {
    'りんご': {'価格': 100, '在庫数': 50},
    'バナナ': {'価格': 80, '在庫数': 30},
    'みかん': {'価格': 60, '在庫数': 100}
}

ここでは商品の在庫情報を管理するための「辞書」を定義しています。

この場合、商品名(りんご、バナナ、みかん)がキーで、それぞれの価格と在庫数を「辞書」で管理しています。

辞書の内容表示

print("初期の在庫:", inventory)

print文を使って現在の辞書(在庫情報)をそのまま出力しています。この時点で、在庫に入っている商品とその価格、在庫数が表示されます。

新しい商品の追加

inventory['ぶどう'] = {'価格': 120, '在庫数': 25}

ここでは辞書に新しい「ぶどう」という商品を追加し、その価格と在庫数を設定しています。

更新処理

inventory['りんご']['在庫数'] = 40

ここでは既存の要素を更新しています。

「りんご」の在庫数を50から40に変更しています。辞書内の辞書の特定の要素(ここでは在庫数)にアクセスして、その値を更新する方法を示しています。

要素の削除

del inventory['バナナ']

del文を使って、辞書の中から「バナナ」のエントリーを削除しています。これにより「バナナ」に関するすべての情報が在庫リストから削除されます。

辞書の内容をループで表示

for item, details in inventory.items():
    print(f"{item}: 価格 = {details['価格']}円, 在庫数 = {details['在庫数']}個")

最後にforループを使って、辞書のすべての商品とその価格、在庫数を順番に表示しています。

inventory.items()を使うことで、辞書内のキーと値をペアで取得でき、それを使って各商品の情報を出力しています。

まとめ

このコードではPythonの「辞書」を使って、商品とその在庫情報を管理する基本操作を学学習しました。

辞書はキーと値のペアでデータを保持する便利なデータ構造であり、これを使ってデータを追加、更新、削除する方法を学べます。

辞書を使いこなすことでデータを効率的に管理する力が身に付きますので、今後もさらに実践的なシナリオで、辞書を応用したプログラムに挑戦してみましょう。

<<前の問題 問題集Top 次の問題>>

この記事への質問・コメント

この記事を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Python記事トップへ戻る
    トップページへ戻る