辞書・連想配列とは?Python初心者向けに使い方とリストとの違いを解説

プログラミング

プログラミングを勉強していると、「辞書」や「連想配列」という言葉が登場します。

「辞書とは何だろう?」「リストと何が違うの?」「キーと値とは何?」と疑問に思っている人も多いのではないでしょうか。

辞書・連想配列とは、名前などのキーと、それに対応する値を組み合わせてデータを管理する仕組みです。

例えば、生徒の名前・年齢・テストの点数をまとめて管理するときに便利です。

この記事では、高校の情報Ⅰを学習する人やプログラミング初心者に向けて、Pythonの辞書の基本から、データの取得・追加・変更・削除、繰り返し処理との組み合わせまで、サンプルコードを使って解説します。

1. 辞書・連想配列とは?

辞書とは、キー(key)と値(value)を組み合わせてデータを管理する仕組みです。

身近な例として、国語辞典を考えてみましょう。「単語」を探すと、その単語に対応する「意味」が見つかります。

プログラミングの辞書も、これと似た仕組みです。

例えば、次のような生徒のデータがあるとします。

辞書のイメージ

キー(key)

値(value)

name

山田太郎

age

16

score

85

それぞれのキーに、対応する値が登録されています。

このデータをPythonの辞書で表現すると、次のようになります。

student = {    "name": "山田太郎",    "age": 16,    "score": 85}

name、age、score がキーで、それぞれに対応する名前・年齢・点数が値です。

Pythonでは、このようなデータ構造を dict(dictionary)と呼びます。

2. 辞書と連想配列の違い

辞書と連想配列は、どちらもキーと値を組み合わせてデータを管理する仕組みを指す言葉です。

Pythonでは「辞書(dict)」、PHPなどでは「連想配列」という名称がよく使われます。

ただし、プログラミング言語によって、キーとして使えるデータの種類や内部の仕組みなどが異なります。

Pythonでは通常、文字列や整数、タプルなどの変更できないデータをキーに使用します。リストなどの変更可能なデータは、そのままではキーにできません。

3. Pythonで辞書を作る方法

Pythonでは、波かっこ {} を使って辞書を作ります。

基本的な書き方は次のとおりです。

変数名 = {    "キー1": 値1,    "キー2": 値2}

例えば、商品の情報を保存してみましょう。

product = {    "name": "ノート",    "price": 150,    "stock": 20}

この辞書には、商品名・価格・在庫数が保存されています。

辞書では文字列、数値、真偽値、リストなど、さまざまな種類のデータを値として使用できます。

4. 辞書からデータを取り出す方法

辞書のデータを取得するには、キーを指定します。

例えば、先ほどの商品情報から商品名を取り出してみましょう。

product = {    "name": "ノート",    "price": 150,    "stock": 20}print(product["name"])

実行結果:

ノート

価格を取得したい場合は、次のように書きます。

print(product["price"])

実行結果:

150

このように、辞書ではインデックスの番号ではなく、キーを指定して対応する値を取り出します。

5. 辞書とリストの違い

以前学習したリストと辞書を比較してみましょう。

リストは、データを順番に並べて管理します。

student = ["山田太郎", 16, 85]print(student[0])

一方、辞書は名前付きのキーを使ってデータを管理します。

student = {    "name": "山田太郎",    "age": 16,    "score": 85}print(student["name"])

両方とも「山田太郎」と表示されますが、データを取り出す方法が異なります。

項目リスト辞書
データの管理順番に並べるキーと値を対応させる
取り出し方data[0]data["name"]
作成方法[10, 20, 30]{"a": 10, "b": 20}
主な用途点数一覧、商品一覧生徒情報、商品詳細

リストは同じ種類のデータを順番に扱いたい場合、辞書は1件のデータを項目名ごとに整理したい場合に便利です。

6. 辞書にデータを追加・変更する方法

辞書は、一度作成したあとでもデータを追加したり変更したりできます。

例えば、商品の辞書にカテゴリーを追加してみましょう。

product = {    "name": "ノート",    "price": 150}product["category"] = "文房具"print(product)

実行結果:

{'name': 'ノート', 'price': 150, 'category': '文房具'}

存在しないキーを指定して値を代入すると、新しいデータが追加されます。

既存のキーを指定した場合は、その値が更新されます。

product["price"] = 200print(product["price"])

実行結果:

200

このように、辞書はデータの追加や変更が簡単にできます。

7. 辞書からデータを削除する方法

辞書から不要なデータを削除するときは、del を使用します。

例えば、商品情報から在庫数を削除してみましょう。

product = {    "name": "ノート",    "price": 150,    "stock": 20}del product["stock"]print(product)

実行結果:

{'name': 'ノート', 'price': 150}

指定したキーと、それに対応する値が削除されます。

また、pop() を使えば、削除した値を受け取ることもできます。

price = product.pop("price")print(price)

実行結果:

150

8. get()を使って安全にデータを取得する

辞書に存在しないキーを指定すると、KeyError というエラーが発生します。

student = {    "name": "山田太郎",    "age": 16}print(student["score"])

この辞書には score がないため、エラーになります。

そこで便利なのが、get() メソッドです。

print(student.get("score"))

実行結果:

None

存在しないキーを指定しても、通常はエラーにならず、None が返されます。

さらに、初期値を指定することもできます。

print(student.get("score", 0))

実行結果:

0

辞書から取得するデータが存在するか分からない場合は、get() を活用すると便利です。

9. for文で辞書のデータを繰り返し処理する

これまで学習してきた繰り返し処理は、辞書にも使用できます。

例えば、次のように記述します。

student = {    "name": "山田太郎",    "age": 16,    "score": 85}for key in student:    print(key)

実行結果:

name
age
score

辞書に対してfor文を使うと、キーを順番に取得できます。

values()で値を取り出す

値だけを取得したい場合は、values() を使います。

for value in student.values():    print(value)

実行結果:

山田太郎
16
85

items()でキーと値を同時に取得する

キーと値を両方取得したい場合は、items() を使います。

for key, value in student.items():    print(key, value)

実行結果:

name 山田太郎
age 16
score 85

辞書でよく使う3つの繰り返し処理

書き方取得する内容
for key in data:キー
for value in data.values():値
for key, value in data.items():キーと値

10. リストと辞書を組み合わせる

実際のプログラミングでは、リストと辞書を組み合わせることがよくあります。

例えば、3人の生徒の情報をまとめて管理する場合を考えてみましょう。

students = [    {"name": "山田", "score": 85},    {"name": "佐藤", "score": 72},    {"name": "鈴木", "score": 90}]

このプログラムでは、リストの中に3つの辞書が入っています。

for文を使うと、生徒の情報を順番に取得できます。

for student in students:    print(student["name"], student["score"])

実行結果:

山田 85
佐藤 72
鈴木 90

条件分岐と組み合わせる

さらに、60点以上の生徒だけを表示してみましょう。

for student in students:    if student["score"] >= 60:        print(student["name"], "合格")

実行結果:

山田 合格
佐藤 合格
鈴木 合格

このように、リスト・辞書・繰り返し処理・条件分岐を組み合わせれば、複数のデータを条件に応じて処理できます。

11. 辞書の中に辞書を入れる

辞書の値として、別の辞書を保存することもできます。これを入れ子構造、またはネストといいます。

例えば、次のようなデータです。

student = {    "name": "山田太郎",    "scores": {        "math": 85,        "english": 92,        "science": 78    }}

この場合、scores の中に数学・英語・理科の点数が保存されています。

英語の点数だけを取得したい場合は、次のように書きます。

print(student["scores"]["english"])

実行結果:

92

入れ子の辞書は、WebアプリケーションやJSON形式のデータを扱うときにもよく登場します。

12. 辞書は実際のシステムでどのように使われる?

辞書の考え方は、実際のWebサイトやアプリケーション開発でも役立ちます。

例えば、ネットショップの商品情報を管理する場合です。

product = {    "id": 1001,    "name": "ノート",    "price": 150,    "stock": 20,    "available": True}

このようなデータを使えば、商品名・価格・在庫数などを項目ごとに取り出せます。

また、APIから取得したJSONデータをPythonで読み込むと、JSONのオブジェクトは通常、辞書に変換されます。

そのため、辞書はWebアプリケーションやデータ処理を学ぶ際にも重要です。

13. 辞書でよくある間違い

初心者が注意したいポイントを確認しましょう。

キーと値を混同する

student = {    "name": "山田太郎"}

この場合、name がキーで、山田太郎 が値です。

student["name"] で値を取得できますが、student["山田太郎"] では取得できません。

同じキーを重複して指定する

student = {    "name": "山田",    "name": "佐藤"}

この場合、同じキーを2回指定しているため、最終的には後から指定した「佐藤」が残ります。

辞書では、キーを重複させないようにしましょう。

キーの大文字と小文字を間違える

student = {    "name": "山田太郎"}

student["name"] と student["Name"] は別のキーとして扱われます。

大文字と小文字の違いにも注意が必要です。

14. 練習問題

ここまで学習した内容を使って、3つの問題に挑戦してみましょう。

問題1:辞書から値を取り出す

商品名・価格・在庫数を持つ辞書を作成し、商品名と価格を表示してください。解答を見る

問題2:辞書にデータを追加する

名前と年齢を持つ辞書に、点数(score)として90を追加し、結果を表示してください。解答を見る

問題3:合格者だけを表示する

3人の生徒のリストから、80点以上の生徒の名前だけを表示してください。解答を見る

15. まとめ

辞書・連想配列とは、キーと値を組み合わせてデータを管理する仕組みです。

Pythonでは dict と呼び、波かっこを使って作成します。

student = {    "name": "山田太郎",    "age": 16}

辞書では、キーを指定したデータの取得、追加、変更、削除ができます。また、for文で繰り返し処理したり、リストと組み合わせて複数のデータを管理したりすることも可能です。

これまで学んだ変数・条件分岐・繰り返し処理・配列・関数・文字列に辞書が加わることで、より実用的なプログラムを作れるようになります。