Pythonで辞書のキーや値の存在の確認、それらを取得する方法を解説します。ここでは以下の構文やメソッドを使います。
- in文
- get()メソッド
- keys()メソッド
- values()メソッド
- items()メソッド
それぞれ、辞書の操作でよく使うものなのでしっかりマスターしておきましょう。
1. 存在の確認|in文
辞書の中に、任意のキーや値が存在するかどうかは、どちらもin文で確認することができます。
1.1. キーの存在確認
辞書の中に任意のキーが存在するかどうかの確認は、次のように書きます。
キー in 辞書
in文はブール値(True or False)で答えを返します。
次のコードでは、辞書の中のキーに’東京’はあるのでTrue、’京都’はないのでFalseと返ってきていますね。
population = {'東京':900, '横浜':370, '大阪':250, '名古屋':230, '福岡':150}
print('東京' in population)
print('京都' in population)
1.2. 値の存在確認
値が存在するかどうかを確認するには、辞書にvalues()メソッドを使用します。
値 in 辞書.values()
values()メソッドは、辞書の値のみを返すメソッドです。これについては後述します。
以下のコードでは、値に900は存在するのでTrue、10は存在しないのでFalseと返ってきています。
population = {'東京':900, '横浜':370, '大阪':250, '名古屋':230, '福岡':150}
print(900 in population.values())
print(10 in population.values())
2. 任意のキーに対応する値を取り出す
存在するキーに対応する値を取り出すには、主に、スライスとget()メソッドの2つの方法があります。
2.1. スライスによる取り出し
辞書の値は、スライスによって取り出すことができます。角括弧 [] の中に対応するキーを指定します。
辞書[キー]
以下のコードではキー’東京’に対応する値を取り出しています。
print(population['東京'])
2.2. get()メソッドによる取り出し
同じようにget()メソッドでも値を取り出すことができます。
辞書.get(キー)
同じように、キー’東京’に対応する値を取り出します。
print(population.get('東京'))
スライスとget()メソッドの違い
スライスとget()メソッドは同じようなものに見えますが違いがあります。まず速度はスライスの方がはるかに早いです。
%%timeit
population['東京']
%%timeit
population.get('東京')
ただし、これだけでget()メソッドには使い道がないとはなりません。
まず、スライスでは存在しないキーを指定した時はエラーになりますが、get()メソッドではエラーではなくNoneです(=何も返されないだけ)。
print(population.get('京都'))
さらに、次のように第二引数を入れると、指定のキーが存在しなかった場合の戻り値を、あらかじめ用意することができます。
print(population.get('京都', 'この辞書に指定の都市はありません。'))
この点から、行いたい操作によって、スライスかget()メソッドを使い分けることができます。
3. 辞書の要素を全て取得
辞書の要素を取得するには次のメソッドを使います。
- keys()メソッド
- values()メソッド
- items()メソッド
それぞれ解説していきます。
なお、for文で辞書の要素を一つずつ取り出す方法は、「Pythonの辞書(dict)のforループで要素を取り出す方法」で解説していますので、あわせてご確認ください。
3.1. 辞書のキーを全て取得|keys()メソッド
keys()メソッドを使うと、辞書のキーを全て取得することができます。
辞書.keys()
keys()メソッドを実行すると、キーのみが格納されたdict_keys型のイテラブル(要素を一つずつ取り出すことができるオブジェクト)を作ります。
population = {'東京':900, '横浜':370, '大阪':250, '名古屋':230, '福岡':150}
keys_ppl = population.keys()
print(keys_ppl)
これに対して、list()関数を使えば、キーのみをリスト化することができます。
keys = list(population.keys())
print(keys)
実は、キーのみを取得する場合は、keys()メソッドを使わなくても、辞書を直接list()関数に渡すことでも可能です。
keys = list(population)
print(keys)
この後に触れるvalues()メソッドとitems()メソッドとの対比として解説したかったのと、keys()メソッドを利用することで、辞書のキーのみを操作したいコードであることを明示できるという効果があるので、ここでは、あえてkeys()メソッドを解説しました。
3.2. 辞書の値を全て取得|values()メソッド
辞書に対してvalues()メソッドを実行すると、値のみが格納されたdict_values型のイテラブルを作ります。
使い方は上述のkeys()メソッドと同じなので割愛します。
values_ppl = population.values()
print(values_ppl)
これをlist()関数にかけると、値のみをリスト化します。
values = list(population.values())
print(values)
3.3. 辞書の要素(キーと値)を全て取得|items()メソッド
辞書にitems()メソッドを実行すると、dict_items型のイテラブルを作成します。
items_ppl = population.items()
print(items_ppl)
これをlist()関数にかけると、要素が、キーと値がペアのタプルになったリストになります。
items = list(population.items())
print(items)
4. まとめ
辞書は、リストと違って、一つの要素はキーと値で成り立っています。
リストと同じように、要素の存在を確認したり取り出したりしようとしたら、常にキーが対象となります。辞書の値を参照して操作するにはvalues()メソッドを使い、キーと値の両方の場合はitems()メソッドを使うと覚えておくと良いでしょう。
コメント