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
{}
辞書のキーに関する制約
辞書のキーはハッシュ可能でなければなりません。例えば、整数、文字列、タプルは有効ですが、リストや辞書は無効です。また、同じキーが複数回登録された場合、最後の値が保持されます。数値的に等価なキー(例: 1 と 1.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()(浅いコピー)を使用します。