Python辞書(dict)とは?
Python辞書(dict)は、キーと値のペアでデータを格納するデータ構造です。リストが数値のインデックス(0、1、2...)でアクセスするのに対し、辞書は任意のキー(文字列、数値など)を使って値にアクセスできます。
日常生活で考えると、実世界の辞書が単語(キー)に対して意味(値)を持つように、プログラムでも関連するデータを効率的に管理できます。
例えば、「動物の名前」をキーにして「その動物の鳴き声」を値として保存するといった使い方です。
辞書の特徴
- 波括弧{ }で作成し、キーと値をコロン:で区切る
- 同じキーは重複できないが、値は重複可能
- キーを指定することで高速な検索や更新が可能
- データの順序は保持される(Python 3.7以降)
- 動的にサイズが変わるため、データの管理に便利
実世界の辞書が単語から意味を素早く調べられるように、プログラムでも関連するデータを効率的に管理できる非常に便利なデータ構造です。
【関連】
Pythonをもっと詳しく学ぶならpaizaラーニング
基本構文
Pythonの辞書は、波括弧を使って簡単に作成できます。基本的な使い方には、辞書の作成、値へのアクセス、要素の追加や削除があります。
空の辞書から始めることも、最初から値を設定することも可能です。以下のコード例で、基本的な辞書の作成と操作方法を確認してみましょう。
出力結果:
{}
{'ネコ': 'ニャー', 'イヌ': 'ワンワン'}
この例では、動物の名前をキーとして、その鳴き声を値として保存しています。辞書は作成後に自由に要素を追加・変更することが可能です。
作成した辞書に対して、角括弧[ ]を使ってキーを指定することで値にアクセスできます。先ほどのコードに加えて、下記のコードを記述してみましょう。
出力結果:
ニャー
{'ネコ': 'ニャー', 'イヌ': 'ワンワン', 'ウシ': 'モー'}
辞書のポイントを簡単にまとめておきます。基本的な特徴をここで押さえておきましょう。
- 辞書名[キー]で値にアクセス
- 辞書名[新しいキー] = 値で新しい要素を追加
- 存在するキーに値を代入すると更新される
- 辞書は可変オブジェクトなので、作成後に自由に変更可能
実用例
ここからは実際のコード例を通して、辞書がどのような場面で使われるかを見ていきましょう。動物を題材にした身近な例を中心に説明していきます。
これから紹介するコード例は、すべて実際に動かすことができます。実際にコードを動かしてみると、より理解が深まるはずです。
ぜひ、一つずつ試してみてください。
基本的な辞書の作成と操作
辞書の最も基本的な使用方法として、動物の情報を管理する例を見てみましょう。
辞書を使うことで、動物の名前をキーとして、その特徴や情報を値として効率的に格納できます。
出力結果:
辞書の内容: {'ライオン': '百獣の王', 'ペンギン': '南極の鳥'}
ライオンの特徴: 百獣の王
追加後: {'ライオン': '百獣の王', 'ペンギン': '南極の鳥', 'ゾウ': '大きな耳'}
この例では、動物の名前をキーとして、その特徴を値として保存しています。後から新しい動物の情報を簡単に追加することができます。
プログラムの流れ
- 初期の動物辞書を作成(ライオンとペンギン)
- 一覧を表示
- 特定の動物の特徴を表示
- 新しい動物(ゾウ)の情報を追加
- 更新された辞書を表示
辞書名[新しいキー] = 値
という形で、新しい要素を追加していることも確認できますね。
辞書の値の更新と削除
既存の辞書に対して値の更新や不要なキーの削除を行う方法を学びます。プログラムの実行中にデータが変更される場面では、このような操作が頻繁に必要になります。
出力結果:
更新前: {'トラ': 3, 'サル': 8, 'キリン': 2}
更新後: {'トラ': 5, 'キリン': 2}
動物園の動物の頭数を管理しているようなケースです。
この例では、トラの頭数を更新し、サルの情報を削除する処理を行っています。
プログラムの流れ
- 動物の頭数を管理する辞書を作成
- トラの頭数を3から5に更新
- del文を使ってサルの情報を削除
- 更新された結果を表示
要素の削除は、
del 辞書名[キー]
という書き方で実行できることをここで覚えておきましょう。
辞書のキーと値の取得
辞書からキーや値を個別に取得したり、存在確認を行う方法について説明します。
出力結果:
キー一覧: ['イヌ', 'ネコ', 'ハムスター']
値一覧: ['ワンワン', 'ニャー', 'チューチュー']
ウサギの鳴き声: 不明
この例では、ペットの鳴き声を管理しています。辞書のキーと値を一覧表示し、存在しない動物についても安全に取得しているコード例です。
プログラムの流れとしては、下記です。
プログラムの流れ
- ペットの鳴き声辞書を作成
- keys()でキーの一覧を取得
- values()で値の一覧を取得
- get()で存在しないキーを安全に取得
初めて目にするメソッドがいくつか出てきましたね。確認しておきましょう。
- keys(): 辞書のキーの一覧を取得
- values(): 辞書の値の一覧を取得
- get(キー, デフォルト値): 存在しないキーでもエラーにならずにデフォルト値を返す
ちなみに、get()メソッドを使用しているのは、存在しないキーにアクセスした際のエラーを回避するためです。
この例ではpet_sounds.get("ウサギ", "不明")のことです。「ウサギ」というキーは辞書に存在しないため、代わりにデフォルト値の「不明」が返されます。
もしウサギが辞書にいれば、そのウサギの鳴き声が返され、デフォルト値は使われません。
pet_sounds["ウサギ"]と書いていると、存在しない場合にエラーになり、プログラムが止まってしまいます。
辞書の結合とコピー
複数の辞書を結合したり、辞書のコピーを作成する方法を学びます。update()メソッドやcopy()メソッドを使用することで、辞書の操作がより柔軟になります。
出力結果:
結合結果: {'ウマ': '草食', 'オオカミ': '肉食', 'イルカ': '哺乳類', 'マグロ': '魚類'}
この例では、陸の動物と海の動物の辞書を結合して、すべての動物の情報をまとめています。
プログラムの流れ
- 陸の動物と海の動物の辞書をそれぞれ分けて作成
- copy()で陸の動物辞書をコピー
- update()で海の動物の情報を追加
- 結合された辞書を表示
新しく出てきたメソッドを確認しましょう。
- copy(): 辞書の浅いコピーを作成
- update(別の辞書): 別の辞書の内容を現在の辞書に追加
既存の情報をまとめて新しい辞書を作るのは、意外とシンプルだということがわかったと思います。
条件分岐での辞書活用
辞書を使った条件分岐により、複雑なif-elif文を簡潔に記述できます。動物の種類に応じて異なる処理を実行する例で、辞書の実用性を確認しましょう。
出力結果:
ネコは毛づくろいをします
この例では、動物ごとの行動を辞書で管理し、条件分岐で適切な処理を実行しています。
プログラムの流れ
- 動物ごとの行動を辞書で定義
- 調べたい動物を指定
- in演算子でその動物が辞書に含まれているかを確認
- 含まれている場合は行動を表示、そうでなければエラーメッセージ
if文と組み合わせて使うこともできるというイメージを持ちましょう。使い方によっては、実に有用です。
ループ処理での辞書操作
辞書のすべての要素に対してループ処理を実行する方法を学びます。items()メソッドを使用することで、キーと値を同時に取得しながら効率的な処理が可能になります。
出力結果:
フラミンゴの色はピンクです
カラスの色は黒です
シロクマの色は白です
この例では、動物の色情報を辞書で管理し、すべての動物について色を表示しています。
プログラムの流れ
- 動物の色情報を辞書で作成
- items()でキーと値のペアを取得
- for文でキーと値を同時に取得しながらループ
- 各動物の色情報を表示
items()は、辞書のキーと値のペアを同時に取得できる便利なメソッドです。特徴を確認しておきましょう。
- for キー, 値 in 辞書.items():の形で使う
- 一つずつ処理しながらキーと値の両方が必要な場合に便利
ネストした辞書の操作
辞書の値として別の辞書を格納する方法について説明します。複雑なデータ構造を表現する際に非常に有効で、動物の詳細情報を階層的に管理できます。
出力結果:
ライオンの生息地: アフリカ
ペンギンの体重: 3kg
動物の詳細情報を階層的に管理した例です。各動物について複数の属性(生息地、体重)を整理して保存しています。
プログラムの流れ
- 動物ごとに詳細情報(生息地、体重)を辞書で作成
- 各動物の辞書をまとめて大きな辞書を作成(ネスト構造)
- 辞書[動物名][属性名]の形で特定の情報にアクセス
- 必要な情報を表示
ネストした辞書では
辞書[外側のキー][内側のキー]
という書き方で深い階層にアクセスできます。
複雑なデータを整理して管理でき、データベースのような構造化された情報を扱えるというメリットがあります。
辞書内包表記の活用
リスト内包表記と同様に、辞書でも内包表記を使用して効率的に辞書を作成できます。既存のデータから新しい辞書を生成する際に非常に便利な機能です。
出力結果:
動物名の文字数: {'ネコ': 2, 'イヌ': 2, 'ウサギ': 3, 'ハムスター': 5}
この例では、動物名のリストから、各動物名の文字数を値とする辞書を作成しています。
プログラムの流れ
- 動物名のリストを作成
- 辞書内包表記で動物名をキー、文字数を値とする辞書を作成
- 結果の辞書を表示
辞書内包表記について、
{キー: 値 for 変数 in リスト}
の形で使います。
この例で、animalは一時的な変数です。
処理の流れとしては、下記のようなイメージになります。
- animalsリストから要素を一つずつ取り出す
- 取り出した要素をanimalという変数に入れる
- そのanimalをキーにして、len(animal)を値にする
この書き方には、次のようなメリットがあります。
- リストの各要素から辞書を効率的に作成できる
- 複雑な処理も1行で記述できる
- 既存データの変換に非常に便利
シンプルな書き方ほど、初心者の方にとっては何をしているのか見えづらい部分もあると思います。
少しずつ慣れていきましょう。
まとめ
Python辞書は、キーと値のペアでデータを効率的に管理できる強力なデータ構造です。
この記事では、基本的な作成方法から高度な操作までくわしく解説しました。簡単に、辞書の活用場面を振り返ってみましょう。
辞書が活躍する場面
- 関連するデータをペアで管理したいとき
- 名前や識別子で素早くデータを検索したいとき
- 設定情報や属性情報を整理したいとき
- 複雑なデータ構造を階層的に管理したいとき
- データの種類ごとに異なる処理を行いたいとき
辞書を使う上で、重要なポイントは下記です。
重要なポイント
- 波括弧{ }で作成し、キーと値をコロン:で区切る
- キーを指定することで高速なデータアクセスが可能
- get(), keys(), values(), items()などの便利なメソッドがある
- update(), copy()でより柔軟な辞書操作ができる
- ネスト構造や内包表記で複雑なデータも効率的に管理できる
初めてPythonを学ぶ方も、この記事で紹介した辞書の基本的な使い方を実際にコードを書いて試してみてください。
キーと値のペアでデータを管理する処理は実際の開発で非常によく使用されるため、しっかりとマスターしておくことが大切です。
辞書を使いこなすことで、データの検索や更新が高速化され、コードの可読性も向上します。
まずは簡単な例から始めて、応用的なネスト構造や内包表記を使い、複雑なデータ管理にも挑戦してみましょう。