🐍 Python
pop() / popitem() で削除しながら値を取り出す
pop()は指定したキーを削除しつつその値を返し、popitem()は最後に追加されたキーと値のペアを削除しつつ返します。「取り出して、かつ辞書から消す」処理を1行で書けるのが特徴です。
d.pop(key) # keyを削除して値を返す。無ければKeyError
d.pop(key, default) # keyが無ければdefaultを返す(KeyErrorにならない)
d.popitem() # 最後に追加されたペアを削除して(キー, 値)を返す
d = {"a": 1, "b": 2, "c": 3}
val = d.pop("b")
print(val)
# 2
print(d)
# {'a': 1, 'c': 3}
# デフォルト値を指定すればKeyErrorを避けられる
d = {"a": 1, "c": 3}
val = d.pop("z", "not found")
print(val)
# not found
# popitem()は最後に追加された要素を返す(3.7以降は挿入順)
d = {"a": 1, "c": 3}
item = d.popitem()
print(item)
# ('c', 3)
print(d)
# {'a': 1}
# 空の辞書に対するpopitem()はKeyError
try:
{}.popitem()
except KeyError as e:
print("KeyError:", e)
# KeyError: 'popitem(): dictionary is empty'
pop()とpopitem()の違い
- pop(key, default=なし)
- キーを指定して削除。デフォルト値を渡せばキーが無くても例外にならない
- popitem()
- キーを指定できず、常に最後に追加された1件を削除して返す。デフォルト値は渡せない
💡 AIコードレビュー観点:デフォルト値の有無で例外の出方が変わる
d.pop(key)とデフォルト値付きのd.pop(key, None)は挙動が大きく異なります。前者はキーが無いと処理が止まる(例外が伝播する)のに対し、後者は静かにNoneを返して処理が続きます。AIが生成したコードで意図せずデフォルト値付きになっていると、本来気づきたいはずのバグ(キーが無いという異常事態)を握りつぶしてしまうことがあります。「無いことがあり得るのか」を確認してから使い分けましょう。