【Python】辞書にキーが存在しない場合にキーと値のペアを登録する方法

2020.10.04 /

【Python】辞書にキーが存在しない場合にキーと値のペアを登録する方法

キーと値の組み合わせである要素を複数保持する辞書は、Pythonでアプリケーションを作成する際に多くの場面で使用します。

その際、辞書に特定のキーが存在するか判定をしたいときがあります。

本記事では、辞書にキー・値が存在するか判定する方法、辞書にキーが存在しない場合にキーと値の組み合わせを登録する方法を解説していきます。

キー・値の存在の有無を判定する

Pythonでファイルやフォルダの存在の有無を判定するには、標準モジュールos.pathのexists()メソッドやisfile()メソッド、isdir()メソッドを使用します。

ではキーや値が辞書に存在するかを判定するにはどうすればよいのか?

答えはin演算子とnot in演算子を使用します。

Python重要用語

in演算子は、特定の要素がオブジェクト(リスト、辞書、文字列など)に含まれるかを判定する演算子です

存在するか確認したいキーまたは値を左に置き、対象のオブジェクト(ここでの対象は辞書)を右に置き、それらの間にin演算子またはnot in演算子を書きます。

辞書からキーと値を取得する方法は以下記事をご参考にしてください。

存在するか確認したいキーまたは値が辞書に存在した場合はTrueを返し、存在しない場合はFalseを返します。
サンプルプログラムを以下に示します。

language = {'英語': 'English', '日本語': 'Japanese', 'スペイン語': 'Spanish'}
print('英語' in language.keys())
# True

print('英語' not in language.keys())
# False

print('中国語' in language.keys())
# False

print('English' in language.values())
# True

print('Chinese' in language.values())
# False

存在の有無でTrueまたはFalseを返しますので、if文の判定を使って、存在する場合の処理や存在しない場合の処理を分けることができますね。

辞書にキーが存在しない場合に値を登録する

辞書にキーが存在するかどうかを上記の方法で判定し、辞書にキーが存在しなかった場合にキーと値の組み合わせを登録する方法について説明します。

判定には、not in演算子を使います。
not in演算子で、キーが辞書に含まれていないかを判定します。

if "中国語" not in language.keys():

キーが辞書に含まれていない場合は、キーと値の組み合わせを辞書に登録します。
以下のように記述します。

language = {'英語': 'English', '日本語': 'Japanese', 'スペイン語': 'Spanish'}
if '中国語' not in language.keys():
    language['中国語'] = 'Chinese'
    print(language)
# {'英語': 'English', '日本語': 'Japanese', 'スペイン語': 'Spanish', '中国語': 'Chinese'}

上記サンプルプログラムでは、辞書のキーに「中国」がない場合、キーに「中国語」、値に「Chinese」の組み合わせ要素を追加します。

setdefault()メソッドを使用する

in演算子を使うこと以外にも、存在の有無を確認して、存在しなければ辞書にキーと値の組み合わせを追加する方法があります。
しかもより簡単な方法で。

その方法とは、setdefault()メソッドを使うことです。

setdefault()メソッドを使うことで、上記サンプルプログラムでは複数行必要だったプログラムがより短くなります。

setdefault()メソッドは、2つの引数を指定します。
第一引数には存在するか確認したいキー、第二引数にはそのキーが存在しなかった場合に登録する値を指定します。

language = {'英語': 'English', '日本語': 'Japanese', 'スペイン語': 'Spanish'}
language.setdefault('中国語', 'Chinese')
print(language)
# {'英語': 'English', '日本語': 'Japanese', 'スペイン語': 'Spanish', '中国語': 'Chinese'}

上記ではsetdefault()メソッドを使うことでif判定が必要なくなりましたね。

もし第一引数に指定したキーが辞書に存在する場合は、第二引数のキーが辞書に保存されることはもちろんないです。

language = {'英語': 'English', '日本語': 'Japanese', 'スペイン語': 'Spanish'}
language.setdefault('英語', 'Eigo')
print(language)
# {'英語': 'English', '日本語': 'Japanese', 'スペイン語': 'Spanish'}

まとめ

今回紹介した「辞書にキーが存在しない場合にキーと値のペアを登録する方法」は、アプリで辞書を使うときにとても使える技術です。

ぜひ辞書を使いこなして、有用なアプリを作成していってください。