🐍 Python

in演算子で辞書にキーがあるか調べる

in演算子を辞書に使うと、指定した値が「キーとして」存在するかどうかを調べられます。値の中に存在するかどうかを調べたい場合はvalues()と組み合わせる必要があり、ここを勘違いしやすいポイントです。

key in d          # keyがキーとして存在すればTrue
value in d.values() # valueが値として存在すればTrue
key not in d      # keyが存在しなければTrue
d = {"a": 1, "b": 2}
print("a" in d)
# True

print(1 in d)
# False ← 1は値であって、キーではない
# 値の中に存在するか調べるにはvalues()を使う
d = {"a": 1, "b": 2}
print("a" in d.values())
# False

print(1 in d.values())
# True
# not inで「存在しない」ことを調べる
d = {"a": 1, "b": 2}
print("z" not in d)
# True
in演算子の対象
d(辞書そのもの)に対するin
常にキーが対象。key in dはkey in d.keys()と同じ意味
d.values()に対するin
値が対象。ただし内部でO(n)の線形探索になり、キー探索(O(1)平均)より遅い
💡 AIコードレビュー観点:if key in d: の後にd[key]を書くなら二度手間かも

if key in d: value = d[key]というパターンは正しく動きますが、辞書へのアクセスが2回発生します(存在確認と取得)。多くの場面ではこれをvalue = d.get(key)1回に置き換えられます。AIが生成したコードでこのパターンが頻出している場合は、get()への置き換えを検討する価値があります(ただし「キーが無いときに何もしない」という分岐そのものが必要な場合はinのままで問題ありません)。

← Python dict クイックリファレンス一覧へ戻る / get()でキーが無くても安全に取得する →