🐍 Python

keys() / values() / items() でキー・値・ペアを取り出す

辞書の中身をまとめて取り出すための3つのメソッドです。keys()はキーだけ、values()は値だけ、items()はキーと値のペアを取得します。forループでの反復処理に特によく使われます。

d.keys()    # キーの一覧(dict_keysビュー)
d.values()  # 値の一覧(dict_valuesビュー)
d.items()   # (キー, 値)のタプルの一覧(dict_itemsビュー)
d = {"a": 1, "b": 2, "c": 3}
print(list(d.keys()))
# ['a', 'b', 'c']

print(list(d.values()))
# [1, 2, 3]

print(list(d.items()))
# [('a', 1), ('b', 2), ('c', 3)]
# items()はforループでキーと値を同時に取り出すのによく使う
d = {"a": 1, "b": 2, "c": 3}
for k, v in d.items():
    print(f"{k} -> {v}")
# a -> 1
# b -> 2
# c -> 3
# キー・値・アイテムはリストではなく「ビュー」オブジェクト
d = {"a": 1, "b": 2, "c": 3}
print(type(d.keys()))
# 

# ビューは辞書の変更を自動的に反映する
d["d"] = 4
print(list(d.keys()))
# ['a', 'b', 'c', 'd'] ← 追加した'd'が反映されている
ビューオブジェクトの性質
dict_keys / dict_values / dict_items
リストのコピーではなく、元の辞書と連動する「窓」のようなオブジェクト。元の辞書を変更すると、既に取得済みのビューにもその変更が反映される
list()で固定化できる
list(d.keys())のようにすると、その時点の内容をコピーしたリストになり、以降の辞書変更の影響を受けなくなる
💡 AIコードレビュー観点:反復中に辞書を変更するコードは要注意

for k in d.keys(): d[k] = ...のように、辞書を反復しながらキーの追加・削除を行うコードはRuntimeError: dictionary changed size during iterationを起こすことがあります。AIが生成したコードでこのパターンを見つけたら、for k in list(d.keys()):のように事前にリスト化してから回すか、別の辞書に結果をためて後でまとめて反映する設計に直しましょう。

← Python dict クイックリファレンス一覧へ戻る / 辞書内包表記でまとめて変換する →