今回は、Pythonの辞書(dict)に要素を追加・更新する方法についてご紹介します。
Pythonの辞書と要素追加・更新の基本
Pythonの辞書(dict)は、キーと値を1対1の対応で保持するデータ構造です。
新しいキーと値を追加したり、既存のキーの値を上書きしたりするさまざまな方法が用意されています。
ここでは、基本的な特徴を押さえながら、代表的な追加・更新の手段を解説します。
辞書への要素追加と更新の代表的な方法
辞書の要素を追加・更新する方法はいくつか存在し、それぞれに特徴があります。
開発環境やユースケースに応じて、使いやすいものを選択すると良いでしょう。
1. 直接代入による追加・更新
もっともシンプルな方法が、キーを指定して値を代入するやり方です。
指定したキーが存在しなければ新しい要素として追加され、既にキーが存在すれば値が更新されます。
1 2 3 4 5 6 7 8 9 |
my_dict = {'a': 1, 'b': 2} # 新しいキーの追加 my_dict['c'] = 3 print(my_dict) # 既存のキーの更新 my_dict['a'] = 10 print(my_dict) |
{‘a’: 1, ‘b’: 2, ‘c’: 3}
{‘a’: 10, ‘b’: 2, ‘c’: 3}
メリット
- コードがシンプルで読みやすい
- 1つのキーと値を処理する際に手軽
デメリット
- 一度に複数の要素を更新する際は、コードが冗長になる
2. update() メソッドを使う
update()メソッドを使うと、辞書やキーワード引数をまとめて追加・更新できます。
指定したキーが既に存在する場合は値が上書きされます。
1 2 3 4 5 6 7 8 9 |
my_dict = {'a': 1, 'b': 2} # 他の辞書を渡す my_dict.update({'c': 3, 'a': 10}) print(my_dict) # キーワード引数で指定 my_dict.update(d=4, e=5) print(my_dict) |
{‘a’: 10, ‘b’: 2, ‘c’: 3}
{‘a’: 10, ‘b’: 2, ‘c’: 3, ‘d’: 4, ‘e’: 5}
メリット
- 複数の要素を一括で追加・更新できる
- 他の辞書やキーワード引数など柔軟な形式に対応
デメリット
- キーの重複があると意図しない上書きが起こる可能性がある
3. setdefault() メソッドを使う
setdefault()は、キーが存在しない場合に限り、指定したデフォルト値をセットします。
キーが既に存在する場合は値を変更せず、既存の値を返す点が特徴です。
1 2 3 4 5 6 7 8 9 10 11 |
my_dict = {'a': 1, 'b': 2} # 'c' が存在しないため、キー 'c' が追加される value_c = my_dict.setdefault('c', 3) print(my_dict) print(value_c) # 'a' は存在するため更新されず、既存の値が返される value_a = my_dict.setdefault('a', 10) print(my_dict) print(value_a) |
{‘a’: 1, ‘b’: 2, ‘c’: 3}
3
{‘a’: 1, ‘b’: 2, ‘c’: 3}
1
メリット
- キーが未定義の場合にのみ値を設定できる
- 同時に既存の値を取得できる
デメリット
- 既存の値を更新できない
- 追加のみ可能なので用途が限定される
4. 辞書のアンパッキング(Python 3.5以降)
Python 3.5以降では、アンパッキング演算子 ** を使って辞書をマージしながら新しい辞書を生成できます。
同じキーが複数ある場合は、右側の辞書にある値が優先されます。
1 2 3 |
my_dict = {'a': 1, 'b': 2} my_dict = {**my_dict, **{'c': 3, 'a': 10}} print(my_dict) |
{‘a’: 10, ‘b’: 2, ‘c’: 3}
メリット
- 新しい辞書として作成できるため、元の辞書を直接変更しない
- 複数の辞書をまとめて扱いやすい
デメリット
- Pythonのバージョンが3.5未満だと使えない
- 既存の辞書をそのまま更新したい場合は少し冗長
5. マージ演算子(Python 3.9以降)
Python 3.9以降では、| 演算子を使った辞書の合成が可能です。
インプレース版の |= もあり、元の辞書に直接要素を追加・更新できます。
1 2 3 4 5 6 7 8 |
my_dict = {'a': 1, 'b': 2} new_entries = {'c': 3, 'a': 10} merged_dict = my_dict | new_entries print(merged_dict) my_dict |= {'x': 100} print(my_dict) |
{‘a’: 10, ‘b’: 2, ‘c’: 3}
{‘a’: 1, ‘b’: 2, ‘x’: 100}
メリット
- 演算子を使った直感的な記述が可能
- 新しい辞書を作るパターンとインプレース更新の両方に対応
デメリット
- Python 3.9未満では使えない
- キーの重複があると後からマージされる辞書の値が優先される
辞書操作時のよくあるエラーと注意点
辞書を扱うときに発生しやすいエラーや注意点をまとめます。
KeyError
存在しないキーを参照した場合にKeyErrorが発生します。
直接キーを指定してアクセスする際は、キーが存在するか確認してから操作すると安全です。
値の上書き
同じキーを使って値を追加すると、元の値が上書きされます。
意図せずデータが更新されることを避けるため、値の変更前にデバッグ出力やログを取るなど、慎重に扱うと良いでしょう。
Pythonバージョンと互換性
アンパッキング(**演算子)やマージ演算子(|)は、Pythonのバージョンによっては使用できません。
自分の開発環境が対応しているかを事前に確認しておく必要があります。
まとめ
Pythonの辞書では、直接代入やupdate()など、さまざまな追加・更新方法が用意されています。
バージョンや使い方に応じて、最適な手段を選ぶことで効率よく辞書を操作できます。
この記事が辞書操作の理解に役立ち、スムーズな開発につながれば幸いです。