このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Python入門】便利な辞書の操作

便利な辞書の操作

 辞書は、キーと値のペアを管理するための柔軟かつ高速なデータ構造であり、キーを指定するだけで対応する値を即座に取得できるため、実世界の辞書(単語と意味)のように利用できます。
 さらに、辞書には便利な操作が数多く用意されており、要素数の確認、キーの存在チェック、キー・値・キーと値の組の一覧取得など、多彩な機能でデータの操作や検証を容易にします。
 ここでは、これらの便利な辞書の操作方法について、具体例と表を交えて分かりやすく解説します。以下の例では、車のモデル名をキー、メーカー名を値とする辞書を用いて説明します。

プログラムのダウンロード

 「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。

1.辞書の基本操作:要素数とメンバーシップの確認

 辞書に含まれる要素の個数を調べたり、特定のキーが存在するかどうかを確認する操作は、データ管理の基本です。

1.1. 辞書の要素数の確認(len関数)

len 関数は、辞書に格納されたキーと値のペアの個数を返します。次の例では、辞書 cars を作成し、その要素数を調べます。

サンプルプログラム

# 辞書の作成:車のモデル名をキー、メーカー名を値とする
cars = {"civic": "Honda", "modelS": "Tesla", "mustang": "Ford"}

# 辞書の要素数を取得する
num_elements = len(cars)
print("cars の要素数:", num_elements)

実行結果

cars の要素数: 3

解説

  • cars は、3つのキーとそれに対応する値から構成される辞書です。
  • len(cars) の結果は 3 となり、辞書に3組のキーと値が含まれていることが確認できます。

1.2. 辞書がキーを含むかどうかの確認(in / not in 演算子)

 辞書は、指定したキーが存在するかどうかを高速に判定できます。以下の例では、キー 'modelS''camaro' の存在を確認しています。

サンプルプログラム

# 'modelS' が辞書に含まれているか確認する
print("'modelS' in cars:", 'modelS' in cars)
# 出力例: 'modelS' in cars: True

# 'camaro' が辞書に含まれているか確認する
print("'camaro' in cars:", 'camaro' in cars)
# 出力例: 'camaro' in cars: False

# 'camaro' が含まれていないかどうかの確認(not in を使用)
print("'camaro' not in cars:", 'camaro' not in cars)
# 出力例: 'camaro' not in cars: True

実行結果

'modelS' in cars: True
'camaro' in cars: False
'camaro' not in cars: True

解説

  • キー 'modelS'cars に存在するため、'modelS' in carsTrue を返します。
  • キー 'camaro' は存在しないので、'camaro' in carsFalse'camaro' not in carsTrue となります。

2.辞書ビューの取得とイテラブル性

 辞書には、キー、値、キーと値のペアの一覧を取得するための便利なメソッドが用意されています。これらのメソッドは辞書ビューオブジェクトを返し、他のイテラブルなデータ構造と同様に扱うことができます。

2.1. keys(), values(), items() メソッド

これらのメソッドを使うことで、辞書の各要素の一覧を簡単に取り出すことができます。

サンプルプログラム

# 辞書 cars のキー一覧、値一覧、キーと値の組一覧を取得する
keys_view = cars.keys()
values_view = cars.values()
items_view = cars.items()

# 辞書ビューオブジェクトはイテラブルなので、list() 関数でリストに変換できる
keys_list = list(keys_view)
values_list = list(values_view)
items_list = list(items_view)

print("keys:", keys_list)
# 出力例: keys: ['civic', 'modelS', 'mustang']

print("values:", values_list)
# 出力例: values: ['Honda', 'Tesla', 'Ford']

print("items:", items_list)
# 出力例: items: [('civic', 'Honda'), ('modelS', 'Tesla'), ('mustang', 'Ford')]

実行結果

keys: ['civic', 'modelS', 'mustang']
values: ['Honda', 'Tesla', 'Ford']
items: [('civic', 'Honda'), ('modelS', 'Tesla'), ('mustang', 'Ford')]

解説

  • keys() は辞書の全キーを含む辞書ビューオブジェクトを返し、list() に渡すことでリストに変換できます。
  • 同様に、values() は全ての値を、items() はキーと値のタプルの一覧を返します。
  • 辞書ビューはイテラブルなため、ループ処理やその他の関数に利用できます。

2.2. 辞書自体のイテラブル性

 辞書はイテラブルとして扱われるため、直接 for 文や list 関数の引数として利用することができます。デフォルトでは、辞書を反復処理するとキーが得られます。

サンプルプログラム

# 辞書 cars をそのまま list() 関数に渡すとキーの一覧が得られる
cars_keys = list(cars)
print("cars を list() で変換:", cars_keys)
# 出力例: cars を list() で変換: ['civic', 'modelS', 'mustang']

# for 文で辞書を反復処理する例
print("cars のキー:")
for key in cars:
    print(key)

実行結果

cars を list() で変換: ['civic', 'modelS', 'mustang']
cars のキー:
civic
modelS
mustang

解説

  • list(cars) は辞書のキーのみを含むリストを返します。
  • for key in cars: と書くと、辞書の各キーが順次変数 key に代入され、反復処理が行われます。
  • この特性により、辞書の内容を簡単に確認したり、キーに基づく操作を実装することができます。

下記の表は、便利な辞書の操作の概要をまとめたものです。

操作内容コード例説明
辞書の要素数の確認len(cars)辞書に含まれるキーと値のペアの個数を返す。
キーの存在確認'modelS' in cars / 'camaro' not in cars指定したキーが辞書に含まれているかをチェックする。
キー一覧の取得cars.keys()全てのキーを含む辞書ビューオブジェクトを返す。
値一覧の取得cars.values()全ての値を含む辞書ビューオブジェクトを返す。
キーと値の組の一覧の取得cars.items()キーと値のタプルの一覧を含む辞書ビューオブジェクトを返す。
辞書自体のイテラブル性list(cars) または for key in cars:辞書はキーの一覧としてイテラブルに利用できる。

まとめ

辞書に対する便利な操作は、データの管理や検索、変換を非常に効率的に行うための重要な手法です。

  • 要素数の確認には len 関数を使い、辞書に含まれるキーと値のペアの数を把握できます。
  • キーの存在確認innot in 演算子で行い、辞書内の特定のキーが存在するかどうかを素早く判定できます。
  • 辞書ビューの取得は、keys(), values(), items() メソッドを利用することで、辞書の各情報を簡単に抽出・変換でき、他のイテラブルなデータ構造との連携が容易になります。
  • 辞書自体がイテラブルであるため、直接 for 文や list 関数に渡すことでキーの一覧を得ることができ、柔軟なデータ操作が可能となります。

 これらの便利な辞書の操作をマスターすることで、Pythonにおけるデータ管理がより効率的かつ堅牢になり、実世界の問題解決に役立てることができます。