Pythonの辞書(dict)のキー・値の存在確認と取得方法|in文, get()他

Pythonで辞書のキーや値の存在の確認、それらを取得する方法を解説します。ここでは以下の構文やメソッドを使います。

  • in文
  • get()メソッド
  • keys()メソッド
  • values()メソッド
  • items()メソッド

それぞれ、辞書の操作でよく使うものなのでしっかりマスターしておきましょう。

目次

1. 存在の確認|in文

辞書の中に、任意のキーや値が存在するかどうかは、どちらもin文で確認することができます。

1.1. キーの存在確認

辞書の中に任意のキーが存在するかどうかの確認は、次のように書きます。

In [ ]:
キー in 辞書

in文はブール値(True or False)で答えを返します。

次のコードでは、辞書の中のキーに’東京’はあるのでTrue、’京都’はないのでFalseと返ってきていますね。

In [1]:
population = {'東京':900, '横浜':370, '大阪':250, '名古屋':230, '福岡':150}

print('東京' in population)
print('京都' in population)
True
False

1.2. 値の存在確認

値が存在するかどうかを確認するには、辞書にvalues()メソッドを使用します。

In [ ]:
 in 辞書.values()

values()メソッドは、辞書の値のみを返すメソッドです。これについては後述します。

以下のコードでは、値に900は存在するのでTrue、10は存在しないのでFalseと返ってきています。

In [1]:
population = {'東京':900, '横浜':370, '大阪':250, '名古屋':230, '福岡':150}

print(900 in population.values())
print(10 in population.values())
True
False

2. 任意のキーに対応する値を取り出す

存在するキーに対応する値を取り出すには、主に、スライスとget()メソッドの2つの方法があります。

2.1. スライスによる取り出し

辞書の値は、スライスによって取り出すことができます。角括弧 [] の中に対応するキーを指定します。

In [ ]:
辞書[キー]

以下のコードではキー’東京’に対応する値を取り出しています。

In [1]:
print(population['東京'])
900

2.2. get()メソッドによる取り出し

同じようにget()メソッドでも値を取り出すことができます。

In [ ]:
辞書.get(キー)

同じように、キー’東京’に対応する値を取り出します。

In [1]:
print(population.get('東京'))
900

スライスとget()メソッドの違い

スライスとget()メソッドは同じようなものに見えますが違いがあります。まず速度はスライスの方がはるかに早いです。

In [2]:
%%timeit
population['東京']
42.8 ns ± 0.749 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
In [3]:
%%timeit
population.get('東京')
79 ns ± 1.05 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

ただし、これだけでget()メソッドには使い道がないとはなりません。

まず、スライスでは存在しないキーを指定した時はエラーになりますが、get()メソッドではエラーではなくNoneです(=何も返されないだけ)。

In [4]:
print(population.get('京都'))
None

さらに、次のように第二引数を入れると、指定のキーが存在しなかった場合の戻り値を、あらかじめ用意することができます。

In [5]:
print(population.get('京都', 'この辞書に指定の都市はありません。'))
この辞書に指定の都市はありません。

この点から、行いたい操作によって、スライスかget()メソッドを使い分けることができます。

3. 辞書の要素を全て取得

辞書の要素を取得するには次のメソッドを使います。

  • keys()メソッド
  • values()メソッド
  • items()メソッド

それぞれ解説していきます。

なお、for文で辞書の要素を一つずつ取り出す方法は、「Pythonの辞書(dict)のforループで要素を取り出す方法」で解説していますので、あわせてご確認ください。

3.1. 辞書のキーを全て取得|keys()メソッド

keys()メソッドを使うと、辞書のキーを全て取得することができます。

In [ ]:
辞書.keys()

keys()メソッドを実行すると、キーのみが格納されたdict_keys型のイテラブル(要素を一つずつ取り出すことができるオブジェクト)を作ります。

In [1]:
population = {'東京':900, '横浜':370, '大阪':250, '名古屋':230, '福岡':150}
keys_ppl = population.keys()
print(keys_ppl)
dict_keys(['東京', '横浜', '大阪', '名古屋', '福岡'])

これに対して、list()関数を使えば、キーのみをリスト化することができます。

In [2]:
keys = list(population.keys())
print(keys)
['東京', '横浜', '大阪', '名古屋', '福岡']

実は、キーのみを取得する場合は、keys()メソッドを使わなくても、辞書を直接list()関数に渡すことでも可能です。

In [3]:
keys = list(population)
print(keys)
['東京', '横浜', '大阪', '名古屋', '福岡']

この後に触れるvalues()メソッドとitems()メソッドとの対比として解説したかったのと、keys()メソッドを利用することで、辞書のキーのみを操作したいコードであることを明示できるという効果があるので、ここでは、あえてkeys()メソッドを解説しました。

3.2. 辞書の値を全て取得|values()メソッド

辞書に対してvalues()メソッドを実行すると、値のみが格納されたdict_values型のイテラブルを作ります。

使い方は上述のkeys()メソッドと同じなので割愛します。

In [4]:
values_ppl = population.values()
print(values_ppl)
dict_values([900, 370, 250, 230, 150])

これをlist()関数にかけると、値のみをリスト化します。

In [5]:
values = list(population.values())
print(values)
[900, 370, 250, 230, 150]

3.3. 辞書の要素(キーと値)を全て取得|items()メソッド

辞書にitems()メソッドを実行すると、dict_items型のイテラブルを作成します。

In [6]:
items_ppl = population.items()
print(items_ppl)
dict_items([('東京', 900), ('横浜', 370), ('大阪', 250), ('名古屋', 230), ('福岡', 150)])

これをlist()関数にかけると、要素が、キーと値がペアのタプルになったリストになります。

In [7]:
items = list(population.items())
print(items)
[('東京', 900), ('横浜', 370), ('大阪', 250), ('名古屋', 230), ('福岡', 150)]

4. まとめ

辞書は、リストと違って、一つの要素はキーと値で成り立っています。

リストと同じように、要素の存在を確認したり取り出したりしようとしたら、常にキーが対象となります。辞書の値を参照して操作するにはvalues()メソッドを使い、キーと値の両方の場合はitems()メソッドを使うと覚えておくと良いでしょう。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる