複数の値を1つにまとめて扱うことが出来るデータ形式の一つに、辞書と呼ばれるものがあります。
今回は、辞書の要素にアクセスする方法を紹介します。
辞書の値を確認する
辞書の値を確認するには、次の書式の通り、キーを指定して参照します。
辞書名[“キー名”]
次の例では、キー”grade”の値をprint()関数で出力しています。
1 2 3 4 5 | student_dict = { "first_name" : "Ichiro" , "last_name" : "Suzuki" , "grade" : 3 } print (student_dict[ "grade" ]) |
3
辞書名[“キー名”]で参照されるものは値なので、プログラム内でそれを使用することが出来ます。
プログラム内で使用する例を見てみましょう。
都道府県名・人口・面積がキーの辞書から、人口密度を求めてみましょう。
1 2 3 4 5 | prefectureData_dict = { "prefecture_name" : "Tokyo" , "population" : 13971109 , "area" : 2194 } print (prefectureData_dict[ "population" ] / prefectureData_dict[ "area" ]) #東京の人口密度 |
6367.871011850501
シンプルにプログラムを書いた場合は、上記のような結果になります。
プログラムを少し工夫して、見やすい出力にしてみます。
結果の値をround()関数で小数点四捨五入し、print()出力の際に単位がわかるようにしてみます。
1 2 3 4 5 6 7 8 | prefectureData_dict = { "prefecture_name" : "Tokyo" , "population" : 13971109 , "area" : 2194 } poplation_density = round (prefectureData_dict[ "population" ] / prefectureData_dict[ "area" ]) #round()関数で値を小数点四捨五入 print (f "人口密度:{poplation_density}(人/平方km)" ) #人口密度 |
人口密度:6368(人/平方km)
結果としては見やすくなりましたね。
次は、少し都道府県を増やしてみましょう。
一つのリストに、複数の辞書を格納することが可能です。
それでは、リスト内にある辞書へのアクセスを試してみましょう。
1 2 3 4 5 6 7 8 9 10 11 | prefectureData_list = [{ "prefecture_name" : "Tokyo" , "population" : 13971109 , "area" : 2194 }, { "prefecture_name" : "Saitama" , "population" : 7343453 , "area" : 3797 }, { "prefecture_name" : "Chiba" , "population" : 6281394 , "area" : 5157 }] print (prefectureData_list[ 0 ][ "prefecture_name" ]) #リストからインデックス番号0にある辞書を取り出して、更に都道府県名をキーに値を取得 |
Tokyo
11行目のprint()では、リストからインデックス番号0にある辞書を取り出して、更にその辞書から”prefecture_name”をキーに値(Tokyo)を取得しています。
[]括弧が並んでいるので最初はわかりにくいかもしれませんが、このような形でリストに格納されている辞書へもアクセスすることが出来ます。それでは、各辞書にアクセスして、各都県の人口密度を求めてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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: #リストから一つずつ辞書を取り出し、for文で繰り返し処理 poplation_density = round (prefectureData[ "population" ] / prefectureData[ "area" ]) #人口密度の算出と、round()による端数の処理 print (prefectureData[ "prefecture_name" ] + "の人口密度:" + str (poplation_density) + "[人/平方km]" ) |
Tokyoの人口密度:6368[人/平方km] Saitamaの人口密度:1934[人/平方km] Chibaの人口密度:1218[人/平方km]
このような感じで、辞書からキーを元に値を取り出して使うことが出来るわけです。
リストやタプルと同じような感じですね。
ただし、プログラムの中で使用する際に、キー名を間違えないように気を付けましょう。
リストやタプルで存在しないインデックス番号を指定すると例外(IndexError)が発生するように、辞書ではキー名を間違えて指定すると例外(KeyError)が発生します。
1 2 3 4 5 | prefectureData_dict = { "prefecture_name" : "Tokyo" , "population" : 13971109 , "area" : 2194 } print (prefectureData_dict[ "XXX" ]) #存在しないキー名(XXX)を指定 |
print(prefectureData_dict[“XXX”])
KeyError: ‘XXX’
いかがでしたでしょうか。
以上が、辞書の要素にアクセスしたプログラムの例でした。
辞書でもリストやタプルと同様に値を取り出して使用することが出来ますので、プログラムの中で使えるように覚えておきましょう。
まとめ
辞書名[“キー名”] の書式で辞書の値を参照することができます。
キー名が異なると例外が発生します。
確認問題
次のプログラムは正常に動作しません。
上手くいかない理由について、正しい記述を選択肢から選びなさい(2つ)。
※実際に動作させて考えてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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: poplation_density = round (prefectureData[ "XXX" ] / prefectureData[ "YYY" ]) print (prefectureData[ "preecture_name" ] + "の人口密度:" + str (poplation_density) + "[人/平方km]" ) |
①リスト、辞書の定義の仕方が誤っている
②12行目で、辞書から値を取り出す際のキー名が間違っている
③9行目で、キー”area”の値が文字列型であるため、12行目で割り算が出来ない
④リストの要素として辞書は使えない
答えは次回の記事の最後に!
→【Python連載】辞書のキー・値・要素を全て取り出す
前回の確認問題の回答例
前回の記事はこちら→【Python連載】辞書に要素を追加・削除する
辞書の要素を変更することに関して、誤っている記述を選びなさい(2つ)。
①辞書は、値を更新することが可能
②辞書は、del文で要素(キーとその値)を削除することが可能
③辞書は、キー名を更新することが可能
④辞書は、別の辞書で値の更新及びキーの追加が可能
⑤辞書は、clear()関数で辞書自体を削除可能
・以下は解答です。
③は誤りです。キー名を更新することは出来ません。その際は、新しい辞書を定義する必要があります。
⑤は誤りです。clear()関数は要素を全て削除するだけであり、空の辞書が出来上がります。