Pythonで、辞書(dict
)の内容を列挙して扱う方法(keys
, values
, items
)について解説します。
Contents
辞書(dict)の内容を列挙する
Pythonプログラミングで辞書(dict
)を使用する際には、キーや値の情報を取り出して活用したくなるケースがよくあります。
辞書では、key
、values
、items
といったメソッドを使用することで辞書におけるキーや値の情報を取り出すことが可能です。また、これらのメソッドはイテラブル(iterable)なオブジェクトを返却するため、for
文でよく利用されます。
本記事では、まず各メソッドの使い方の基本とfor
文で各メソッドの返却値を扱う方法を例を使って紹介します。
イテラブル(iterable)とは、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にて公開しています。参考にしていただければと思います。