【Python】辞書から要素(キー、値)をforループで取得する方法【keys()、values()、items()】

時計 2020.10.03 / 時計

【Python】辞書から要素(キー、値)をforループで取得する方法【keys()、values()、items()】

複数の要素を保持することができるデータ型にはリストやタプル、辞書があります。

辞書はkey(キー)とvalue(バリュー)のペアで構成されており、他のデータ型とは異なりインデックスという順序付けされた番号で管理されているわけではないですよね。
そのためキーと値をそれぞれ取得するために専用のメソッドを使用します。

キーの取得には keys()メソッド、value値の取得にはvalues()メソッド、そしてキーの両方(組み合わせ)を取得するには()items メソッドをそれぞれ使用します。

本記事では辞書に含まれるキー、値、すべてのキーと値の組み合わせをfor文を用いてそれぞれ取得する方法について解説します。

辞書型とは

辞書についての理解が明るくない方向けに、まずは辞書について説明します。

辞書は連想配列とも呼ばれるデータ型(オブジェクト)です。

それぞれの要素は以下のように「key」(キー)と「value」(バリュー)のペアで構成されています。

language = {'英語': 'English', '日本語': 'Japanese', 'スペイン語': 'Spanish'}

辞書はリストやタプルのような番号で管理されているインデックスはないです。
インデックスの代わりにキーが使用されます。

上記からわかるように、辞書は波カッコ{}の中にキーと値を記述します。
ここではキーが英語、日本語、スペイン語で、値がEnglish、Japanese、Spanishで対応しています。

リストではインデックスは整数値のみでしたが、辞書ではキーに文字列を指定できますし、0から始めなくてもいいのです。

注意点としては、キーが重複することは許されません。
そして辞書には「先頭」や「末尾」といった順序の概念はありません。

上記に記した特性を持った辞書から、キーと値の取得方法を3つ説明します。

keys()メソッド

辞書のキーを取得するにはkeys()メソッドを使用します。

辞書にkeys()メソッドを使用するとすべでのキーが保持されたdict_keys型を返します。

language = {'英語': 'English', '日本語': 'Japanese', 'スペイン語': 'Spanish'}
lan_key = language.keys()
print(type(lan_key))
# <class 'dict_keys'>

dict_keys型はリスト型のように、中身を変更したり、中身を追加したりすることはできないです。

ではどのようにdict_keys型を使うのか?

答えはfor文(ループ)を使うのです。

for文を使うことで、dict_keys型の中身(すべてのキー)が取得できます。

language = {'英語': 'English', '日本語': 'Japanese', 'スペイン語': 'Spanish'}
for key in language.keys():
    print(key)
# 英語
# 日本語
# スペイン語

dist_keys型(キーの一覧)をリスト型に変更する

dist_keys型ではプログラムで使いにくいから、中身(キーの一覧)をリスト型に変更したいという場合はlist()関数を使用します。

language = {'英語': 'English', '日本語': 'Japanese', 'スペイン語': 'Spanish'}
key = language.keys()
key_list = list(key)
print(key_list)
# ['英語', '日本語', 'スペイン語']

上記のサンプルプログラムのように、list関数でdist_keys型をリスト型に変更できます。

values()メソッド

辞書のバリュー(値)を取得するにはvalues()メソッドを使用します。

辞書にvalues ()メソッドを使用するとすべでのキーが保持されたdict_values型を返します。

language = {'英語': 'English', '日本語': 'Japanese', 'スペイン語': 'Spanish'}
lan_value = language.values()
print(type(lan_value))
# <class 'dict_values'>

dict_values型も中身を変更したり、中身を追加したりすることはできないです。

ここでも中身(すべての値)を取得するためにfor文を使用します。

language = {'英語': 'English', '日本語': 'Japanese', 'スペイン語': 'Spanish'}
for value in language.values():
    print(value)
# English
# Japanese
# Spanish

dist_values型(値の一覧)をリスト型に変更する

こちらも中身(値の一覧)をリスト型に変更したいという場合はlist()関数を使用します。

language = {'英語': 'English', '日本語': 'Japanese', 'スペイン語': 'Spanish'}
value = language.values()
value_list = list(value)
print(value_list)
# ['English', 'Japanese', 'Spanish']

上記のサンプルプログラムのように、list関数でdist_values型をリスト型に変更できます。

items()メソッド

辞書のキーとバリュー(値)の両方(組み合わせ)を取得するにはitems ()メソッドを使用します。

辞書にitems()メソッドを使用するとすべでのキーが保持されたdict_items型を返します。

language = {'英語': 'English', '日本語': 'Japanese', 'スペイン語': 'Spanish'}
lan_item = language.items()
print(type(lan_item))
# <class 'dict_items'>

ここでも中身(すべてのキーと値)を取得するためにfor文を使用します。

language = {'英語': 'English', '日本語': 'Japanese', 'スペイン語': 'Spanish'}
for key, value in language.items():
    print('key : ' + key + ', value : ' + value)
# key : 英語, value : English
# key : 日本語, value : Japanese
# key : スペイン語, value : Spanish

dist_items型(キーと値の一覧)をリスト型に変更する

こちらも中身(キーと値の一覧)をリスト型に変更したいという場合はlist()関数を使用します。

各要素(キーと値の組み合わせ)はタプル型となって、リスト型に保持されます。

language = {'英語': 'English', '日本語': 'Japanese', 'スペイン語': 'Spanish'}
item = language.items()
item_list = list(item)
print(item_list)
# [('英語', 'English'), ('日本語', 'Japanese'), ('スペイン語', 'Spanish')]

まとめ

Pythonでプログラムを作成する際に、辞書を使う場面は非常に多いです。

辞書を使ったときはほぼ必ず今回紹介した3つのメソッドのうちどれかを使用するかと思います。

多くの場面でitems()メソッドを使用すると思いますが、3つのメソッドの使い方をぜひ覚えておいてください。