【Python】辞書(dict)の内容を列挙して扱う方法 ~ keys, values, items ~
の内容を列挙して扱う方法-_-keys-values-items-_.jpg)
Pythonで、辞書(dict)の内容を列挙して扱う方法(keys, values, items)について解説します。
目次
辞書(dict)の内容を列挙する
Pythonプログラミングで辞書(dict)を使用する際には、キーや値の情報を取り出して活用したくなるケースがよくあります。
辞書では、key、values、itemsといったメソッドを使用することで辞書におけるキーや値の情報を取り出すことが可能です。また、これらのメソッドはイテラブル(iterable)なオブジェクトを返却するため、for文でよく利用されます。
本記事では、まず各メソッドの使い方の基本とfor文で各メソッドの返却値を扱う方法を例を使って紹介します。
辞書(dict)の内容を列挙するビューを作成する方法 ~ keys, values, items ~
キーを列挙するビューを作成する ~ keysメソッド ~
辞書のキーを列挙するビューを作成するには、以下のようにkeysメソッドを使用します。
d = {"k1": 10, "k2": 20, "k3": 30, "k4": 40, "k5": 50}
# keys()でキーのビューを取得する
key_v = d.keys()
print(type(key_v))
print(f"key_v: {key_v}")【実行結果】 <class 'dict_keys'> key_v: dict_keys(['k1', 'k2', 'k3', 'k4', 'k5'])
keysメソッドの返却値を確認すると辞書のキーの部分を列挙してとってきていることが分かります。
また、keysメソッドの返却値の型はdict_keysクラスのオブジェクトです。このdict_keysクラスのオブジェクトはイテラブルなオブジェクトなので、for文に指定して繰り返すことができます。
keysメソッドを使用して、キーに対してfor文を実行する方法
keysメソッドを用いてキーに対してfor文を実行するには以下のようにします。
d = {"k1": 10, "k2": 20, "k3": 30, "k4": 40, "k5": 50}
# for文で値を扱う
for key in d.keys():
print(f"key: {key}")【実行結果】 key: k1 key: k2 key: k3 key: k4 key: k5
値を列挙するビューを作成する ~ valuesメソッド~
辞書の値を列挙するビューを作成するには、以下のようにvaluesメソッドを使用します。
d = {"k1": 10, "k2": 20, "k3": 30, "k4": 40, "k5": 50}
# values()で値のビューを取得する
val_v = d.values()
print(type(val_v))
print(f"val_v: {val_v}")【実行結果】 <class 'dict_values'> val_v: dict_values([10, 20, 30, 40, 50])
valuesメソッドの返却値を確認すると辞書の値の部分を列挙してとってきていることが分かります。
また、valuesメソッドの返却値の型はdict_valuesクラスのオブジェクトです。このdict_valuesクラスのオブジェクトはイテラブルなオブジェクトなので、for文に指定して繰り返すことができます。
valuesメソッドを使用して、値に対してfor文を実行する方法
valuesメソッドを用いて値に対してfor文を実行するには以下のようにします。
d = {"k1": 10, "k2": 20, "k3": 30, "k4": 40, "k5": 50}
# for文で値を扱う
for value in d.values():
print(f"value: {value}")【実行結果】 value: 10 value: 20 value: 30 value: 40 value: 50
要素を列挙するビューを作成する ~ itemsメソッド ~
辞書の要素(キー, 値)を列挙するビューを作成するには、以下のようにitemsメソッドを使用します。
d = {"k1": 10, "k2": 20, "k3": 30, "k4": 40, "k5": 50}
# items()で要素のビューを取得する
itm_v = d.items()
print(type(itm_v))
print(f"itm_v: {itm_v}")【実行結果】
<class 'dict_items'>
itm_v: dict_items([('k1', 10), ('k2', 20), ('k3', 30), ('k4', 40), ('k5', 50)])itemsメソッドの返却値を確認すると辞書のキーと値のペアを取得できていることが分かります。
また、itemsメソッドの返却値の型はdict_itemsクラスのオブジェクトです。このdict_itemsクラスのオブジェクトはイテラブルなオブジェクトなので、for文に指定して繰り返すことができます。
itemsメソッドを使用して、要素に対してfor文を実行する方法
itemsメソッドをfor文で扱う場合には「キーと値それぞれを取得して使う方法」と「tubple(タプル)で要素を受け取って使用する方法」があるのでそれぞれ例を見てみましょう。
キーと値それぞれを取得して使う方法
itemsメソッドを用いて要素(キー、値)に対してfor文を実行するには以下のようにします。itemsメソッドの返却値のオブジェクトは、タプルを列挙しているものなので、keyとvalueにアンパック代入されます。
d = {"k1": 10, "k2": 20, "k3": 30, "k4": 40, "k5": 50}
# for文で要素(キー、値)を扱う
for key, value in d.items():
print(f"key: {key}, value: {value}")【実行結果】 key: k1, value: 10 key: k2, value: 20 key: k3, value: 30 key: k4, value: 40 key: k5, value: 50
tuple(タプル)で要素を受け取って使用する方法
itemsメソッドの返却値のオブジェクトは、タプルを列挙したものであるため、以下のようにタプルとして受け取って扱うことも可能です。
d = {"k1": 10, "k2": 20, "k3": 30, "k4": 40, "k5": 50}
# for文で要素(キー、値)をタプルとして受け取って扱う
for tpl in d.items():
print(f"key: {tpl[0]}, value: {tpl[1]}")【実行結果】 key: k1, value: 10 key: k2, value: 20 key: k3, value: 30 key: k4, value: 40 key: k5, value: 50
keys、values、itemsのビューとしての特徴
keys、values、itemsが返却するのは、辞書のコピーではなく「ビュー」となっていることに注意しましょう。
「ビュー」というその名の通り、元データを見るためのものです。つまり、元データが変化するとビューとして取得したものの情報も変わるので注意してください。
実際に以下の例で見てみましょう。
d = {"k1": 10, "k2": 20, "k3": 30, "k4": 40, "k5": 50}
# items()で要素のビューを取得する
itm_v = d.items()
print(f"itm_v: {itm_v}")
# 元の辞書にデータを追加する。
d["k6"] = 60
# データ追加前に作成したビューを確認してみる。
print(f"itm_v: {itm_v}")【実行結果】
itm_v: dict_items([('k1', 10), ('k2', 20), ('k3', 30), ('k4', 40), ('k5', 50)])
itm_v: dict_items([('k1', 10), ('k2', 20), ('k3', 30), ('k4', 40), ('k5', 50), ('k6', 60)])上記例では、itemsでビューとして取得した後に元の辞書にデータを追加しています。
その後、再度itemsで取得しなおすといった操作をしていませんがitm_vをprintすると追加した要素が増えていることが分かります。このようにビューなのかコピーなのかというのは非常に重要ですのでしっかりと理解して使用しましょう。
まとめ
Pythonで、辞書(dict)の内容を列挙して扱う方法について解説しました。
辞書では、key、values、itemsといったメソッドを使用することで辞書におけるキーや値の情報を取り出すことができることを紹介しました。また、これらのメソッドはイテラブル(iterable)なオブジェクトを返却するため、for文で使用することができます。
なお、key、values、itemsの返却値はコピーではなくビューであるため、元データが変更されるとビューの結果も変化しますので十分に注意しましょう。
上記で紹介しているソースコードについては GitHub にて公開しています。参考にしていただければと思います。


に要素を追加・更新する方法.jpg)
内包表記の使い方.jpg)