Pythonの辞書型:マッピングと集合の基本

Pythonにおける辞書(dict)は唯一のマッピング型であり、キーと値のペアを格納する可変コンテナです。キーはハッシュ可能なオブジェクトでなければならず、値には任意のPythonオブジェクト(他のコンテナを含む)を格納できます。

辞書の作成と初期化

空の辞書や要素付き辞書は以下のように作成できます:

>>> config = {}
>>> user = {'name': 'alice', 'id': 1001}

また、dict()コンストラクタを使用して作成することも可能です:

>>> coords = dict([('x', 10), ('y', 20)])
>>> coords
{'x': 10, 'y': 20}

fromkeys()メソッドを使えば、複数のキーに同一の初期値を与えた辞書を生成できます:

>>> flags = {}.fromkeys(['debug', 'verbose'], False)
>>> flags
{'debug': False, 'verbose': False}

>>> defaults = {}.fromkeys(['host', 'port'])
>>> defaults
{'host': None, 'port': None}

辞書要素へのアクセス

キーを使って直接値を取得できます:

>>> user['name']
'alice'

辞書をループで走査する際は、キーを直接イテレートできます:

>>> for k in user:
...     print(f'{k}: {user[k]}')
...
name: alice
id: 1001

辞書の更新と削除

辞書は可変であるため、要素の追加・更新・削除が可能です:

>>> user['role'] = 'admin'      # 追加
>>> user['id'] = 1002            # 更新
>>> del user['name']             # 削除(存在しないキーはKeyError)
>>> user.pop('role')             # 削除して値を返す
'admin'
>>> user.clear()                 # 全要素削除
>>> user
{}

辞書のキーに関する制約

辞書のキーはハッシュ可能でなければなりません。例えば、整数、文字列、タプルは有効ですが、リストや辞書は無効です。また、同じキーが複数回登録された場合、最後の値が保持されます。数値的に等価なキー(例: 11.0)は同一と見なされます。

マッピング型の演算子と関数

主な操作には以下があります:

  • d[key]:値の取得または代入
  • key in d:キーの存在確認(has_key()の代替)

内蔵関数の使用例:

>>> len(user)
2
>>> hash('host')   # 文字列はハッシュ可能
-762837492837492
>>> hash([1,2])    # リストは不可
TypeError: unhashable type: 'list'

辞書の主要メソッド

よく使われるメソッドを以下に示します:

>>> data = {'a': 1, 'b': 2}
>>> data.keys()
dict_keys(['a', 'b'])
>>> data.values()
dict_values([1, 2])
>>> data.items()
dict_items([('a', 1), ('b', 2)])

>>> extra = {'b': 3, 'c': 4}
>>> data.update(extra)  # 既存キーは上書き
>>> data
{'a': 1, 'b': 3, 'c': 4}

>>> data.setdefault('d', 5)  # キーがなければ設定
5
>>> data.setdefault('a', 99) # 既存ならそのまま
1

辞書のコピーにはcopy()(浅いコピー)を使用します。

タグ: Python dict マッピング型 ハッシュ可能

8月5日 20:41 投稿