複数の値を1つにまとめて扱うことが出来るデータ形式の一つに、辞書と呼ばれるものがあります。
辞書に関するメソッドは様々あります。今回はそれらの、その他のメソッドの使い方を一部紹介します。
pop()メソッド
pop()メソッドでは、辞書から指定したキーの値を取り出して、その後に要素(そのキーと値)を削除します。
辞書の要素を削除するにはdel文というものがありますが、pop()メソッドでは削除の際に値を取り出すことが出来るというのがdel文とは異なる点になります。
1 2 3 4 | dict = { 'first_name' : 'Yuki' , 'last_name' : 'Yoshino' , 'grade' : 3 , 'class' : 'B' , 'Attendance' : 31 , 'Age' : 18 } print ( dict .pop( "Age" )) #キー"Age"の値の出力(そして、キー"Age"の部分の要素は削除される) print ( dict ) |
18
{‘first_name’: ‘Yuki’, ‘last_name’: ‘Yoshino’, ‘grade’: 3, ‘class’: ‘B’, ‘Attendance’: 31}
要素を削除する際にこのpop()メソッドを使用すると値を出力してから削除することが出来るので、del文と併せて覚えておくと良いかもしれません。値を出力させておいてから削除したいという時には要素の値を出力させてからdel文で削除しても別に構わないのですが、pop()メソッドを使えば処理が一つで済むというメリットがあります。
※pop()メソッドは指定したキーの要素に対して処理が行われますが、任意の要素に対して同様の処理を行うpopitem()メソッドというメソッドもあります。
get()メソッド
get()メソッドでは、辞書の指定したキーの値を出力することが出来ます。
pop()メソッドとは異なり、要素の削除はしません。
キーの値を出力するには、単に、
辞書名[キー名]
と行うことでも可能ですが、その方法では存在しないキー名を指定してしまった場合には例外(KeyError)が発生してしまいます。
get()メソッドでは、存在しないキー名を指定するとNoneが出力されるだけであり、例外は発生しません。
1 2 3 4 | dict = { 'first_name' : 'Yuki' , 'last_name' : 'Yoshino' , 'grade' : 3 , 'class' : 'B' , 'Attendance' : 31 , 'Age' : 18 } print ( dict .get( "Age" )) #キー"Age"の値の出力 print ( dict .get( "XXX" )) #存在していないキーを指定 |
18
None
辞書の値を出力させたいという場合にget()メソッドを使用すると、存在しないキー名を指定してしまっても例外(KeyError)が発生しないので例外処理を記述する手間を省くことは出来ます。
ただし、例外(KeyError)が発生しないからといって、get()メソッドで出力させた値を使ってその後計算を行うというような場合には注意しましょう。Noneに対して計算を行うと、例外が発生してしまいます。
1 2 3 | dict = { 'first_name' : 'Yuki' , 'last_name' : 'Yoshino' , 'grade' : 3 , 'class' : 'B' , 'Attendance' : 31 , 'Age' : 18 } print (( dict .get( "XXX" )) * 2 ) #None×2 という実行出来ない計算を実施 |
キーの存在確認(in演算子、not in 演算子)
こちらはメソッドではありませんが、辞書内に指定したキーが存在していればTrueを、していなければFalseを返すin演算子というものを使用出来ます。
※逆となるnot in演算子では、辞書内に指定したキーが存在していればFalseを、していなければTrueを返します。
1 2 3 4 5 6 7 8 9 10 11 | dict = { 'first_name' : 'Yuki' , 'last_name' : 'Yoshino' , 'grade' : 3 , 'class' : 'B' , 'Attendance' : 31 , 'Age' : 18 } #in 演算子 print ( "in演算子での実行" ) print ( "Age" in dict ) #キー"Age"が辞書dict内に存在していればTrue、していなければFalse print ( "XXX" in dict ) #キー"XXX"が辞書dict内に存在していればTrue、していなければFalse #not in演算子 print ( "not in演算子での実行" ) print ( "Age" not in dict ) #キー"Age"が辞書dict内に存在していればFalse、していなければTrue print ( "XXX" not in dict ) #キー"XXX"が辞書dict内に存在していればFalse、していなければTrue |
in演算子での実行
True
False
not in演算子での実行
False
True
では上記の演算子をどのような場面で使うかといいますと・・・指定したキー名の要素が辞書に存在していなければ要素を追加する、というif文で使用すると便利です。
以下は、辞書に”Address(住所)”というキーが存在していない場合にはそれを追加する、という例です。
1 2 3 4 5 | dict = { 'first_name' : 'Yuki' , 'last_name' : 'Yoshino' , 'grade' : 3 , 'class' : 'B' , 'Attendance' : 31 , 'Age' : 18 } if "Address" not in dict : #辞書dictに"Address"というキーが無い場合 dict [ "Address" ] = "default" #辞書dictに"Address"というキー、"default"という値を追加 print ( dict ) |
{‘first_name’: ‘Yuki’, ‘last_name’: ‘Yoshino’, ‘grade’: 3, ‘class’: ‘B’, ‘Attendance’: 31, ‘Age’: 18, ‘Address’: ‘default’}
いかがでしたでしょうか。
基本的な辞書の操作はkeys()メソッドやvalues()メソッド、del文などを覚えておけば十分かもしれませんが、今回紹介したものは覚えておくと便利というようなものですので、折角なので併せて覚えておきましょう。
まとめ
pop()メソッドでは、辞書から指定したキーの値を取り出して、その後に要素(そのキーと値)を削除します。
get()メソッドでは、辞書の指定したキーの値を出力することが出来ます。
キーの存在確認としてin演算子、not in 演算子を使用することが出来ます。
確認問題
次のようなプログラムがあります。
1 2 3 4 | dict = { "key0" : 0 , "key1" : 1 , "key2" : 2 } dict .pop( "key1" ) print ( dict ) |
出力結果は、次のうちどれになるでしょうか。
①1
②{‘key0’: 0, ‘key2’: 2}
③{“key0″:0,”key1″:1,”key2”:2}
※以下は解答になります。
pop()では、指定したキーの値を取り出した後に、その要素を削除します。
今回はprint()でdictを出力しているので、つまり、キー”key1″の要素が削除された辞書が出力されます。
よって、正解は②になります。
前回の確認問題の回答例
前回の記事はこちら→【Python連載】辞書内包表記で辞書を作成する
次のような2つのリストがあります。
1 2 | keys = [ "key0" , "key1" , "key2" ] values = [ 0 , 1 , 2 ] |
これらについて、以下の(1)(2)のプログラムを考えて、辞書を出力してみましょう。
(1)for文のみを使用した辞書内包表記で辞書を作成
(2)for文以外にもif文を使用して、keysリストの”Key2″を辞書の要素に含めないように辞書を作成
・以下は解答になります。
(1)
1 2 3 4 | keys = [ "key0" , "key1" , "key2" ] values = [ 0 , 1 , 2 ] dict1 = {key:value for key,value in zip (keys,values)} print (dict1) |
(2)
1 2 3 4 | keys = [ "key0" , "key1" , "key2" ] values = [ 0 , 1 , 2 ] dict2 = {key:value for key,value in zip (keys,values) if key ! = "key2" } print (dict2) |