以下の内容はhttps://pydocument.hatenablog.com/entry/2023/03/19/223231より取得しました。


Pythonの辞書(dictionary, dict)を解説:基本から応用まで

Pythonの辞書(dictionary, dict)は、キーと値のペアを格納するデータ構造で、その柔軟性と効率性から多くの場面で利用されます。この記事では、Python辞書の基本的な使い方から、辞書内包表記といった少し進んだ使い方まで、サンプルコードを交えながら解説します。

辞書とは

辞書とはキーと値のペアを格納するデータ構造のことで、Pythonでは以下のような形で表現されます。

辞書の構造の例

# 最も簡単な例
simple_dict = {
    "apple": 1,
    "banana": 2
}

この例では、キーは果物の名前(文字列)、値はその個数(数値)を表しています。 この辞書というデータ構造は柔軟で、例えば以下のような複雑なデータの形式も表現することができます。

# より複雑な例
my_dict = {
    "name": "Alice",  # キー: 文字列, 値: 文字列
    "age": 30,       # キー: 文字列, 値: 数値
    "is_active": True, # キー: 文字列, 値: 真偽値
    "hobbies": ["reading", "hiking"], # キー: 文字列, 値: リスト
    "address": {      # キー: 文字列, 値: 辞書 (ネスト)
        "street": "123 Main St",
        "city": "Anytown"
    }
}

この例では、my_dict は5つのキー・バリューペアを持っています。値には、文字列、数値、真偽値、リスト、さらには別の辞書(ネストされた辞書)など、さまざまな型のオブジェクトが格納されており、データの構造を柔軟に表現できることがわかります。

辞書の制約

辞書を作成する際は、以下のような条件を満たす必要があります。

  • キーは一意である必要がある (重複不可)。
  • 値は重複しても良い。
  • ミュータブル (変更可能) なオブジェクトである。

辞書の作成

最も基本的な辞書の作成方法は、波括弧{}を使用し、キーと値を:で区切り、各ペアをカンマ,で区切って記述する方法です。

# 基本的な辞書の作成
my_dict = {"apple": 1, "banana": 2, "orange": 3}
print(my_dict)  # 出力: {'apple': 1, 'banana': 2, 'orange': 3}

# 空の辞書を作成
empty_dict = {}
print(empty_dict) # 出力: {}

# dict() を使った作成 (あまり一般的ではない)
another_dict = dict(apple=1, banana=2, orange=3)
print(another_dict) # 出力: {'apple': 1, 'banana': 2, 'orange': 3}

dict() を使用する方法は可読性が低くなる場合があるため、波括弧{} を使用する方法を推奨します。

辞書の要素へのアクセス

辞書の要素にアクセスするには、[]内にキーを指定します。

my_dict = {"apple": 1, "banana": 2, "orange": 3}

# キーを使って値にアクセス
print(my_dict["apple"])  # 出力: 1

存在しないキーにアクセスしようとするとKeyErrorが発生します。

my_dict = {"apple": 1, "banana": 2, "orange": 3}

# 存在しないキーにアクセスすると KeyError
# print(my_dict["grape"]) # KeyError: 'grape'

KeyErrorを避けるためには、.get()メソッドを使用します。.get()メソッドでは、キーが存在しない場合に返すデフォルト値を指定できます。

my_dict = {"apple": 1, "banana": 2, "orange": 3}

# .get() を使ってアクセス
print(my_dict.get("apple"))       # 出力: 1
print(my_dict.get("grape"))       # 出力: None (デフォルト値はNone)
print(my_dict.get("grape", 0))   # 出力: 0 (デフォルト値を0に設定)

辞書の要素の追加と更新

辞書に新しい要素を追加するには、新しいキーを指定して値を代入します。既存のキーに対して代入を行うと、値が更新されます。

my_dict = {"apple": 1, "banana": 2}

# 新しい要素を追加
my_dict["orange"] = 3
print(my_dict)  # 出力: {'apple': 1, 'banana': 2, 'orange': 3}

# 既存の要素を更新
my_dict["apple"] = 10
print(my_dict)  # 出力: {'apple': 10, 'banana': 2, 'orange': 3}

.update()メソッドを使うと、一度に複数の要素を追加・更新できます。

my_dict = {"apple": 1, "banana": 2}
additional_data = {"orange": 3, "apple": 10} # appleは更新、orangeは追加される。

# .update() で複数の要素を追加・更新
my_dict.update(additional_data)
print(my_dict)  # 出力: {'apple': 10, 'banana': 2, 'orange': 3}

辞書の要素の削除

辞書から要素を削除するには、del文を使用します。

my_dict = {"apple": 1, "banana": 2, "orange": 3}

# del で要素を削除
del my_dict["banana"]
print(my_dict)  # 出力: {'apple': 1, 'orange': 3}

.pop() メソッドを使用すると、指定したキーの要素を削除し、その値を返します。

my_dict = {"apple": 1, "banana": 2, "orange": 3}

# .pop() で要素を削除し、値を取得
removed_value = my_dict.pop("banana")
print(my_dict)        # 出力: {'apple': 1, 'orange': 3}
print(removed_value)  # 出力: 2

# .pop() で存在しないキーを指定すると KeyError
# my_dict.pop("grape") # KeyError: 'grape'

# .pop() で存在しないキーを指定した場合のデフォルト値を設定
removed_value2 = my_dict.pop("grape", -1) #キーが存在しない場合-1を返す
print(removed_value2)  # 出力: -1

.clear() メソッドを使用すると辞書内のすべての要素を削除し、空の辞書にします。

my_dict = {"apple": 1, "banana": 2, "orange": 3}
my_dict.clear()
print(my_dict) # 出力: {}

辞書の反復処理 (ループ)

辞書の要素を反復処理するには、forループを使用します。

my_dict = {"apple": 1, "banana": 2, "orange": 3}

# キーのループ
for key in my_dict:  # または for key in my_dict.keys():
    print(key)  # apple, banana, orange の順に出力 (順序は保証されない)

# 値のループ
for value in my_dict.values():
    print(value)  # 1, 2, 3 の順に出力 (順序は保証されない)

# キーと値のペアのループ
for key, value in my_dict.items():
    print(f"{key}: {value}")  # apple: 1, banana: 2, orange: 3 の順に出力 (順序は保証されない)

その他の便利なメソッド

メソッド 説明 使用例
.keys() 辞書のすべてのキーを含むビューオブジェクトを返す。 my_dict.keys()
.values() 辞書のすべての値を含むビューオブジェクトを返す。 my_dict.values()
.items() 辞書のすべての(キー、値)のタプルを含むビューオブジェクトを返す。 my_dict.items()
len() 辞書内の要素数を取得する。 len(my_dict)

辞書内包表記 (Dictionary Comprehension)

リスト内包表記のように、辞書も内包表記を使って簡潔に生成できます。

#  数値のリストから、{数値: 数値の2乗} という辞書を生成
numbers = [1, 2, 3, 4, 5]
squared_dict = {x: x**2 for x in numbers}
print(squared_dict)  # 出力: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

# 条件付きの辞書内包表記
even_squared_dict = {x: x**2 for x in numbers if x % 2 == 0}
print(even_squared_dict) # 出力: {2: 4, 4: 16}



以上の内容はhttps://pydocument.hatenablog.com/entry/2023/03/19/223231より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14