Pythonの辞書にデフォルト値を設定する方法!get()とdefaultdictの使い方
生徒
「先生、Pythonの辞書で、キーがない場合にデフォルトの値を返したいんですが、どうすればいいですか?」
先生
「いい質問です。Pythonには辞書のキーがない場合でもエラーを出さずに、代わりにデフォルト値を返す方法がいくつかあります。代表的なのはget()メソッドと、collections.defaultdictという便利なクラスです。」
生徒
「get()メソッドとdefaultdictはどう違うんですか?具体的にどう使うのか教えてください!」
先生
「それでは基本からわかりやすく説明しますね!」
1. Pythonの辞書とは?
辞書(dictionary)は「キー」と「値」の組み合わせを保存するデータの入れ物です。例えば、「りんご:赤」「バナナ:黄色」のように、名前(キー)から情報(値)を取り出せます。
辞書は波かっこ{}で囲み、キーと値をコロン:でつなげて書きます。
colors = {"りんご": "赤", "バナナ": "黄色"}
print(colors["りんご"]) # 赤と表示される
2. 辞書のキーがないときにエラーが出る問題
辞書で存在しないキーを指定すると、KeyErrorというエラーになります。例えば:
print(colors["みかん"]) # KeyError: 'みかん'
これは「みかん」というキーが辞書にないためです。これを防ぐのが、今回のテーマの「デフォルト値を使う方法」です。
3. get()メソッドでデフォルト値を設定する方法
get()は辞書のキーに対応する値を取り出すメソッドで、もしキーがなければ「デフォルト値」を返すように設定できます。
colors = {"りんご": "赤", "バナナ": "黄色"}
# キーが存在するとき
print(colors.get("りんご")) # 赤
# キーがないとき、None(何もない状態)が返る
print(colors.get("みかん")) # None
# キーがないときにデフォルト値を指定できる
print(colors.get("みかん", "オレンジ")) # オレンジ
このように、get()なら辞書にないキーを指定してもエラーにならず、好きな値を返せます。
4. defaultdictを使って辞書のデフォルト値を設定する方法
defaultdictは、collectionsモジュールにある特別な辞書で、キーがないとき自動でデフォルトの値を作ってくれます。
たとえば、キーがないときに「0」を返す整数用の辞書を作ることができます。
from collections import defaultdict
# int()は0を返すので、初期値が0の辞書になる
count = defaultdict(int)
print(count["りんご"]) # 0(まだキーはないけど自動で0になる)
count["りんご"] += 1
print(count["りんご"]) # 1
通常の辞書だと、存在しないキーにアクセスするとエラーになりますが、defaultdictなら自動で初期値を作ってくれるので便利です。
5. defaultdictの他の使い方
defaultdictは他にも、文字列やリストなど好きな型のデフォルト値を設定できます。例えば空のリストがデフォルトなら:
from collections import defaultdict
words = defaultdict(list)
words["果物"].append("りんご")
words["果物"].append("バナナ")
print(words) # {'果物': ['りんご', 'バナナ']}
print(words["野菜"]) # [](まだ何も入っていないけど空のリストが返る)
このように、辞書の値をリストとして扱うときに、キーがない場合でもすぐに追加処理ができます。
6. get()とdefaultdictの使い分け方
get()は既存の普通の辞書で使い、キーがないときだけ一時的にデフォルト値を返したい場合に便利。defaultdictは新しく辞書を作るときに使い、キーがない場合でも自動でデフォルト値を用意して扱いやすくしたいときに使う。
目的や場面に応じて使い分けましょう。
7. キーの存在を確認しながら安全に値を取り出す方法
辞書のキーがあるかどうか確かめたいときは、in演算子を使います。
colors = {"りんご": "赤"}
key = "バナナ"
if key in colors:
print(colors[key])
else:
print(f"{key}は辞書にありません。")
こうすると、存在しないキーを間違って使ってエラーになるのを防げます。
8. Pythonの辞書でよく使う便利なテクニック
get()で簡単にデフォルト値を設定できるdefaultdictで自動的に初期値を作成してくれる辞書を作れるin演算子でキーの存在を確認しながら安全に操作できる- 普通の辞書と使い分けて効率よくプログラムを書こう
まとめ
Pythonの辞書にデフォルト値を設定する考え方を振り返ろう
この記事では、Pythonの辞書において「キーが存在しない場合にどう振る舞うか」という、とても重要なポイントを学んできました。Pythonの辞書は、キーと値をセットで管理できる便利なデータ構造ですが、存在しないキーをそのまま指定するとエラーが発生してしまいます。初心者の方が最初につまずきやすい部分でもあり、ここを理解できるかどうかで、辞書操作への苦手意識が大きく変わってきます。
その問題を解決する方法として、まず紹介したのがget()メソッドです。get()を使えば、キーが存在しない場合でもエラーにならず、あらかじめ決めたデフォルト値を返すことができます。この仕組みを知っているだけで、辞書を使ったプログラムは一気に安全で書きやすくなります。特に、設定情報や入力データを扱う場面では、get()は非常に登場回数の多いメソッドです。
get()メソッドの役割と使いどころ
get()メソッドは、すでにある普通の辞書に対して「もしなければこの値を使う」という考え方で使います。一時的に値を取り出したい場合や、存在チェックを簡単に済ませたい場合に向いています。if文でキーの有無を確認するよりも、コードが短くなり、読みやすくなるのも大きなメリットです。
また、デフォルト値を指定しなかった場合はNoneが返るという点も重要です。Noneは「何もない状態」を表す特別な値なので、あとから条件分岐と組み合わせて使うこともできます。get()は、辞書を安全に扱うための基本中の基本として、ぜひ身につけておきたい方法です。
defaultdictで辞書の使い方が変わる
次に紹介したdefaultdictは、辞書そのものの性質を少し変えた、より便利な仕組みです。defaultdictを使うと、キーが存在しない場合でも、自動的に初期値を作成してくれます。整数、リスト、文字列など、用途に応じてデフォルト値を自由に設定できるため、データの集計や分類処理で非常に力を発揮します。
たとえば、カウント処理では初期値が0の辞書が欲しくなりますし、グループ分けでは空のリストを自動で用意してほしい場面がよくあります。そうした処理を、if文を書かずに自然な形で実現できるのがdefaultdictの強みです。Pythonらしい簡潔なコードを書くうえで、覚えておくと非常に役立ちます。
サンプルプログラムで理解を深めよう
from collections import defaultdict
# 生徒の点数を教科ごとにまとめる例
scores = defaultdict(list)
scores["数学"].append(80)
scores["数学"].append(90)
scores["英語"].append(75)
print(scores["数学"])
print(scores["国語"]) # まだ登録していないが空のリストが返る
このように、defaultdictを使えば「キーがあるかどうか」を意識せずに、そのまま処理を書き進めることができます。初心者のうちは少し難しく感じるかもしれませんが、使い慣れてくると手放せなくなる便利な仕組みです。
get()とdefaultdictの使い分けを意識しよう
get()とdefaultdictは、どちらも「キーがない場合」に対応するための方法ですが、役割は少し異なります。既存の辞書から安全に値を取り出したいときはget()、これからデータをどんどん追加していく辞書を作りたいときはdefaultdict、と考えると分かりやすいでしょう。
どちらを使うかを意識して選べるようになると、Pythonの辞書操作は一段レベルアップします。無理にどちらか一方だけを使う必要はなく、場面に応じて使い分けることが大切です。
生徒「辞書でエラーが出る理由が、ようやく分かりました。」
先生「キーが存在しないときの動きを知っておくのは、とても大事なんだ。」
生徒「get()なら簡単にデフォルト値を返せるのが便利ですね。」
先生「そうだね。短いコードで安全に書けるのが魅力だよ。」
生徒「defaultdictは、集計やリスト管理に向いているのも分かりました。」
先生「その理解ができれば、辞書を使ったプログラムが一気に書きやすくなるよ。」