閉じる

【Python】辞書のキーと値を一覧で取得する方法(keys,values)

辞書からキーや値を一覧で取り出す処理は、データの確認や出力整形、集計を行う際に頻出です。

本記事では、Pythonのdict.keys()dict.values()dict.items()を中心に、一覧の取得方法からループでの使い方、動作の注意点までを初心者向けに順を追って解説します。

Pythonの辞書からキーと値を一覧で取得

ここではまず、辞書からキーだけ、値だけ、そしてキーと値のペアをまとめて取り出す3つの基本メソッドを確認します。

例として、果物と価格の辞書を用意します。

Python
# サンプル辞書(果物の価格)。値(価格)は重複しうることに注意。
prices = {
    "apple": 120,
    "banana": 200,
    "orange": 150,
    "mango": 200,  # 200が重複
}
print(prices)
実行結果
{'apple': 120, 'banana': 200, 'orange': 150, 'mango': 200}

dict.keys()でキー一覧を取得

dict.keys()は、辞書に存在する全てのキーを「ビュー」として返します。

ビューは見た目はコレクションのように扱えますが、リストではありません(後述)。

Python
prices = {
    "apple": 120,
    "banana": 200,
    "orange": 150,
    "mango": 200,  # 200が重複
}
# キーの一覧を取得
keys_view = prices.keys()
print(keys_view)          # ビューの表示
print("banana" in keys_view)  # 'in' による存在確認
実行結果
dict_keys(['apple', 'banana', 'orange', 'mango'])
True

ポイントとして、inで存在確認ができるため、キーの有無チェックにも使えます。

dict.values()で値一覧を取得

dict.values()は、辞書に保存されている全ての値を返します。

値は重複しても問題ありません。

Python
prices = {
    "apple": 120,
    "banana": 200,
    "orange": 150,
    "mango": 200,  # 200が重複
}
# 値の一覧を取得
values_view = prices.values()
print(values_view)
実行結果
dict_values([120, 200, 150, 200])

値は重複しうるため、後で重複を除きたい場合はsetなどを使います(後述)。

dict.items()でキーと値のペア一覧を取得

dict.items()は、各要素を(キー, 値)のタプルにしたビューを返します。

ループでキーと値を同時に取り出すのに最適です。

Python
prices = {
    "apple": 120,
    "banana": 200,
    "orange": 150,
    "mango": 200,  # 200が重複
}
# (キー, 値)のペアを取得
items_view = prices.items()
print(items_view)

# 1件ずつ確認したいとき
for k, v in prices.items():
    print(f"{k} -> {v}")
実行結果
dict_items([('apple', 120), ('banana', 200), ('orange', 150), ('mango', 200)])
apple -> 120
banana -> 200
orange -> 150
mango -> 200

以下の表は、3つのメソッドの違いを簡潔に整理したものです。

メソッド返り値の型(ビュー)内容主な用途辞書変更の反映
dict.keys()dict_keysキーのみ存在確認、キーの列挙される
dict.values()dict_values値のみ値の列挙、集計される
dict.items()dict_items(キー, 値)のペア同時取り出しされる

リスト化とループでの使い方

ビューはイテラブルですがリストではないため、必要に応じてリスト化して扱うことがあります。

また、ループでの使い方は覚えてしまうと実務で非常に役立ちます。

listでdict_keysやdict_valuesをリストに変換

一覧を固定したスナップショットとして扱いたい場合や、インデックスでアクセスしたい場合はlist()で変換します。

Python
prices = {
    "apple": 120,
    "banana": 200,
    "orange": 150,
    "mango": 200,  # 200が重複
}

# ビューをリストに変換して固定する(スナップショット)
keys_list = list(prices.keys())
values_list = list(prices.values())
items_list = list(prices.items())

print(keys_list)
print(values_list)
print(items_list)
print(keys_list[1], items_list[2])  # インデックスアクセスの例
実行結果
['apple', 'banana', 'orange', 'mango']
[120, 200, 150, 200]
[('apple', 120), ('banana', 200), ('orange', 150), ('mango', 200)]
banana ('orange', 150)

forループでキーや値を順に処理

辞書はそのままループするとキーが順に取り出されます。

dict.keys()を明示しても同じ結果です。

Python
prices = {
    "apple": 120,
    "banana": 200,
    "orange": 150,
    "mango": 200,  # 200が重複
}
# キーだけループ(書き方は2通り。結果は同じ)
for k in prices:  # 省略形
    print(k)

for k in prices.keys():  # 明示形
    print(k)

# 値だけループ
total = 0
for v in prices.values():
    total += v
print("合計:", total)
実行結果
apple
banana
orange
mango
apple
banana
orange
mango
合計: 670

キーと値を同時に取り出すforの書き方

dict.items()を使うと、アンパックでキーと値を同時に受け取れます。

整形出力や条件分岐がしやすくなります。

Python
prices = {
    "apple": 120,
    "banana": 200,
    "orange": 150,
    "mango": 200,  # 200が重複
}
# (キー, 値)を同時に取り出す
for fruit, price in prices.items():
    if price >= 180:
        print(f"{fruit} は少し高め({price}円)")
    else:
        print(f"{fruit} はお手頃({price}円)")
実行結果
apple はお手頃(120円)
banana は少し高め(200円)
orange はお手頃(150円)
mango は少し高め(200円)

知っておきたい挙動と注意点

細かな仕様を理解しておくと、思わぬバグを避けられます。

特に順序とビューの動的更新、重複値の扱いは重要です。

挿入順で一覧が並ぶ(Python 3.7+)

Python 3.7以降の辞書は、基本的に「挿入した順序」を保持します。

再代入しても順序は変わりません。

Python
d = {}
d["b"] = 2
d["a"] = 1
d["c"] = 3
print(list(d.keys()))  # 追加した順

# 既存キーに再代入しても順序は維持される
d["a"] = 10
print(list(d.keys()))
実行結果
['b', 'a', 'c']
['b', 'a', 'c']

ビューは動的に変わるため必要ならlistで固定

keys()values()items()が返すビューは「辞書の現在の状態を映す窓」です。

辞書を変更するとビューの内容も変わります。

スナップショットが必要ならlist()に変換します。

Python
d = {"x": 1, "y": 2}
ks = d.keys()              # 動的ビュー
ks_snapshot = list(d.keys())  # 固定スナップショット

print("初期:", ks)
print("初期(固定):", ks_snapshot)

# 辞書を更新
d["z"] = 3

print("更新後ビュー:", ks)           # 変化が反映される
print("更新後(固定):", ks_snapshot)  # 変わらない
実行結果
初期: dict_keys(['x', 'y'])
初期(固定): ['x', 'y']
更新後ビュー: dict_keys(['x', 'y', 'z'])
更新後(固定): ['x', 'y']

値の重複を除くならsetで一意化

values()は重複を含むため、一意な値だけにしたいときはsetで変換します。

ただしsetは順序を持たないことに注意してください。

Python
vals = prices.values()
unique_vals = set(vals)  # 重複を除去(順序なし)
print(unique_vals)
実行結果
{200, 120, 150}

もし「最初に現れた順序で一意化」したい場合は、dict.fromkeysを使うと簡単です(Python 3.7+では挿入順を保持します)。

Python
# 値の出現順を保った一意化
ordered_unique_vals = list(dict.fromkeys(prices.values()))
print(ordered_unique_vals)
実行結果
[120, 200, 150]

この方法は、重複を除去しつつ見た目の順序を維持したい場合に便利です。

まとめ

キー一覧はdict.keys()、値一覧はdict.values()、キーと値のペア一覧はdict.items()で取得できます。これらはすべて「ビュー」であり、辞書の変更がリアルタイムに反映されます。

インデックスでのアクセスや状態の固定が必要なときは、list()でスナップショットを作成します。

Python 3.7以降、辞書は挿入順を保持します。整形出力やループの見通しが良くなります。

値の重複を除去するにはsetを使います。順序を保って一意化したい場合はdict.fromkeysが有効です。

実務では、キー存在チェック(例:"banana" in prices)やfor k, v in dict.items():の同時取り出しを自然に使えるようにしておくと、データ操作が格段に楽になります。

Python 実践TIPS - データ操作
この記事を書いた人
エーテリア編集部
エーテリア編集部

人気のPythonを初めて学ぶ方向けに、文法の基本から小さな自動化まで、実際に手を動かして理解できる記事を書いています。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!