Developer

【Python独学】辞書のキー・値・要素を全て取り出す
2020.11.02
Lv1

【Python独学】辞書のキー・値・要素を全て取り出す

複数の値を1つにまとめて扱うことが出来るデータ形式の一つに、辞書と呼ばれるものがあります。
今回は辞書のキー・値を効率的に取り出す方法を紹介します。


キーを全て取り出す

辞書では、辞書のキー名だけをリストに格納して管理することも可能です。
keys()関数では、全てのキーを取り出します。特定の要素のキーを取り出すことはできません。
なお、keys()で辞書からキーを取り出しても、元の辞書からキーが削除されるわけではありません。

student_dict = {"first_name":"Ichiro",
                "last_name":"Suzuki",
                "grade":3}

print(student_dict.keys() )    #keys()でstudent_dictのキーを取り出す
C:\Python> python 8-4-1.py
dict_keys([‘first_name’, ‘last_name’, ‘grade’])

keys()で取り出された値は、dict_keys型と呼ばれる形のデータになっています。
dict_keys型のデータは、個別に中のデータ(キー名)を取り出すことが出来ません。
そこで、次のようにしてリストに格納することで扱いやすくなります。

student_dict = {"first_name":"Ichiro",
                "last_name":"Suzuki",
                "grade":3}

student_key = list(student_dict.keys())  #list()でリストに変換
print(student_key)
C:\Python> python 8-4-2.py
[‘first_name’, ‘last_name’, ‘grade’]

リストに格納することが出来ました。
キー名を使用するようなプログラムを書く際には、このようにリストにすることで可能になります。

値を全て取り出す

今度は、キーではなく値です。
辞書の値を全て取り出すには、values()関数を使用します。
なお、keys()と同様、元の辞書から値が削除されるわけではありません。

student_dict = {"first_name":"Ichiro",
                "last_name":"Suzuki",
                "grade":3}

print(student_dict.values() )    #values()でstudent_dictのキーを取り出す
C:\Python> python 8-4-3.py
dict_values([‘Ichiro’, ‘Suzuki’, 3])

values()で取り出された値は、dict_values型と呼ばれる型のデータになっています。
(キーを取り出すkeys()の場合はdict_keys型)
dict_values型のデータも個別に中のデータ(値)を取り出すことが出来ません。
同じくlist()関数でリストに格納することで扱いやすくなりますので、覚えておきましょう。

キーと値の両方を取り出す

上記でキー・値、それぞれをリストにすることが出来ましたが、要素(キー・値を両方)を一遍にリストに格納する方法もあります。
要素を全て取り出すには、items()関数を使用します。
なお、keys()やvalues()と同様、元の辞書から要素が削除されるわけではありません。

student_dict = {"first_name":"Ichiro",
                "last_name":"Suzuki",
                "grade":3}

print(student_dict.items() )    #items()でstudent_dictのキーと値を取り出す
C:\Python> python 8-4-4.py
dict_items([(‘first_name’, ‘Ichiro’), (‘last_name’, ‘Suzuki’), (‘grade’, 3)])

items()で取り出された要素は、今度はdict_items型と呼ばれる型のデータになっています。
これも同様にlist()関数でリストにすることで扱いやすくなるのですが・・・

実は、次のようにfor文でdict_items型のデータから直接キー名と値をそれぞれ順番に取り出していくことも可能です。
※dict_keys型のデータもdict_values型のデータも同様のことが可能です。これはあくまで全てを取り出す場合の話であり、指定した要素のキー・値を取り出すにはリストにすることが必要です。

student_dict = {"first_name":"Ichiro",
                "last_name":"Suzuki",
                "grade":3}

for key,value in student_dict.items() :    #dict_items型のデータからキー(key)と値(value)を順番に取り出す
    print(f"キー:{key}、値:{value}")
C:\Python> python 8-4-5.py
キー:first_name、値:Ichiro
キー:last_name、値:Suzuki
キー:grade、値:3

リストに格納しておくとキー名だけ・値だけを扱うような場面が出てきた場合には扱いやすくなりますので、リストに格納する方法も覚えておきましょう。


まとめ

辞書のキーを全て取り出すには、keys()関数を使用します。
辞書の値を全て取り出すには、values()関数を使用します。
辞書の要素を全て取り出すには、items()関数を使用します。


確認問題

次のようなプログラムがあります。

student_dict = {"first_name":"Ichiro",
                "last_name":"Suzuki",
                "grade":3}

print(student_dict.keys())
print(list(student_dict.values()))
print(student_dict.items())

5,6,7行目のprint()関数での出力はどのような形のものになるでしょうか。

答えは次回の記事の最後に!
【Python連載】辞書内包表記で辞書を作成する


前回の確認問題の回答例

前回の記事はこちら→【Python連載】辞書の要素にアクセスする

次のプログラムは正常に動作しません。
上手くいかない理由について、正しい記述を選択肢から選びなさい(2つ)。
※実際に動作させて考えてみましょう。

prefectureData_list = [{"prefecture_name":"Tokyo",
                       "population":13971109,
                       "area":2194},
                       {"prefecture_name":"Saitama",
                       "population":7343453,
                       "area":3797},
                       {"prefecture_name":"Chiba",
                       "population":6281394,
                       "area":"5157"}]

for prefectureData in prefectureData_list:      #リストから1つ辞書を取り出し、for文で繰り返し処理
    poplation_density = round(prefectureData["XXX"] / prefectureData["YYY"])  #人口密度の算出と、round()による端数の処理
    print(prefectureData["preecture_name"] + "の人口密度:" + str(poplation_density) + "[人/平方km]")

①リスト、辞書の定義の仕方が誤っている
②12行目で、辞書から値を取り出す際のキー名が間違っている
③9行目で、キー”area”の値が文字列型であるため、12行目で割り算が出来ない
④リストの要素として辞書は使えない

・以下が解答になります。
②③がプログラムが上手くいかない理由となります。

連載目次

独学で学ぶ Pythonプログラミング 連載目次