Pythonの辞書はリストのインデックス番号を「名前のあるキー」にしたバージョンです。
リストと似ていますがリストと同じかそれ以上に使うことが多いデータ型なので、一通りの使い方が頭に入っているとプログラミングが捗ります。
ここでは辞書について
- Pythonの辞書って何?
- Pythonの辞書の基本的な構文、初期化方法は?
- Pythonの辞書の要素の追加・更新・削除の方法は?
といった疑問に答えつつ、辞書について解説します。
目次
Pythonの辞書(dict)とは?
そもそも辞書って何だろう?というところから話をしていきたいと思います。
多分辞書と聞いて真っ先に思い浮かぶのは「子供の頃学校で使った分厚い国語辞典」とかかなと思うのですが、Pythonで言うところの辞書は「キーと値が1対1で結びついたリスト」です。
キーを指定することで、対応する値を取得できるようになったのがPythonの辞書です。分厚い本の辞書の「さくいん」と似たような感じでしょうか。
辞書はリストと違い、インデックス番号ではなくキーで値を管理するので、要素の順番がないことが特徴です(といってもfor..inを使ったら左から順に取り出されはしますが)。
Pythonの辞書(dict)の初期化
では辞書の使い方を見ていきましょう。
基本的な辞書の初期化方法
辞書の初期化は次のようにします。
書式 変数 = {キー1 : 値1, キー2 : 値2, キー3 : 値3 ... キーn : 値n}
では実際に辞書を初期化してみましょう。
subjects = {"Japanese":68, "Math":32, "Social Studies":89, "Science":91, "English":41}
print(subjects)
{'Japanese': 68, 'Math': 32, 'Social Studies': 89, 'Science': 91, 'English': 41}
とある生徒の全教科の点数を辞書にしました。
リストと違い辞書はキーを指定できるので「その値が何を示しているのか」が分かりやすくなる特徴があり、コードが長くなってきたりしたときにコード意味を追いやすくて便利です。
リストと同じように辞書も初期化時に折り返しが使えます。リストより辞書の方がキーを指定する分横に長くなりがちなので重宝します。
subjects = {
"Japanese":68,
"Math":32,
"Social Studies":89,
"Science":91,
"English":41
}
print(subjects)
また、辞書はキーも値も型がミックスされていても問題ありません。
mixes = {10:"ten", "seven":7, "真":True, False:"偽"}
print(mixes)
{10: 'ten', 'seven': 7, '真': True, False: '偽'}
さらに、キーには「タプル」を指定することができます。
タプルを辞書のキーにする方法はこちらの記事を参照してください。
※ここに「【Python初心者向け】タプル(tuple)の使い方を徹底解説!」の「辞書のキーに使える」へのリンクを挿入予定
dict()を使った辞書の初期化
次にdict()を使って辞書を初期化する方法を見ていきましょう。
まずはリストから辞書を作ってみます。リストから辞書を作るには [キー, 値] の書式のリストをdict()の引数に渡してあげます。
list = [
["male_20", 172.3],
["male_25", 170.5],
["female_20", 159.5],
["female_25", 155.2],
]
dict = dict(list)
print(dict)
{'male_20': 172.3, 'male_25': 170.5, 'female_20': 159.5, 'female_25': 155.2}
気をつける点は2次元リストにすることです。1次元リストを渡すと辞書への変換エラーが発生します。
タプルでもリストと同じように辞書を作ることができます。
tuple = (
("male_20", 172.3),
("male_25", 170.5),
("female_20", 159.5),
("female_25", 155.2),
)
dict = dict(tuple)
print(dict)
また、dict()はzip()と組み合わせることで、キーのリストと値のリストを合わせて辞書にすることができます。
keys = ["apple", "orange", "grape"]
values = ["りんご", "オレンジ", "ぶどう"]
dict = dict(zip(keys, values))
print(dict)
{'apple': 'りんご', 'orange': 'オレンジ', 'grape': 'ぶどう'}
なお、キーの要素数と値の要素数が合わなくてもエラーにはなりません。「数の小さい方に合わせて辞書が初期化」されます(要素数があっていないのに気づけないとバグの温床になります、気をつけましょう)。
keys = ["apple", "orange", "grape"]
values = ["りんご", "オレンジ"] #ぶどうが足りない!
dict = dict(zip(keys, values))
print(dict)
{'apple': 'りんご', 'orange': 'オレンジ'}
dict.fromkeys()で辞書を初期化する
dict.fromkeys()はリストやタプルを第一引数に、初期値を第二引数に渡すことで、第一引数のリストをキーに、第二引数の初期値を値にして辞書を初期化します。
実際にやってみましょう。
dict = dict.fromkeys(["t1", "t2", "t3"], 0)
print(dict)
{'t1': 0, 't2': 0, 't3': 0}
第一引数のt1, t2, t3を、第二引数の0で初期化しました。
Pythonの辞書(dict)の使い方
初期化した辞書の使い方を見ていきましょう。
要素の参照
要素の参照はキーを 辞書[キー] のように指定します。
subjects = {
"Japanese":68,
"Math":32,
"Social Studies":89,
"Science":91,
"English":41
}
print(subjects["Math"])
print(subjects["Science"])
32
91
辞書でもfor..inで全ての要素を参照できますが、辞書をfor..inで一つずつ取得できるのは値ではなく「キー」の方です。値を取得する場合は取得したキーを辞書に渡すことで取得できます。
subjects = {
"Japanese":68,
"Math":32,
"Social Studies":89,
"Science":91,
"English":41
}
for key in subjects: #キーが取得できる
value = subjects[key] #キーを使って値を取得する
print(key + ":" + str(value))
Japanese:68
Math:32
Social Studies:89
Science:91
English:41
また、キーと値をそれぞれリストに変換することもできます。
キーを取得する場合はkeys()、値を取得する場合はvalues()を使います。
subjects = {
"Japanese":68,
"Math":32,
"Social Studies":89,
"Science":91,
"English":41
}
keys = list(subjects.keys()) #list()で変換
values = list(subjects.values()) #list()で変換
print(keys)
print(values)
['Japanese', 'Math', 'Social Studies', 'Science', 'English']
[68, 32, 89, 91, 41]
要素の追加・更新
辞書は 辞書[キー] = 値 とすることで要素の追加や更新ができます。
指定したキーが存在する場合は更新、存在しない場合は追加になります。
subjects = {
"Japanese":68,
"Math":32,
"Social Studies":89,
"Science":91,
"English":41
}
subjects["Math"] = 100 #Mathは存在するので更新
subjects["Art"] = 2 #Artは存在しないので追加
print(subjects)
{'Japanese': 68, 'Math': 100, 'Social Studies': 89, 'Science': 91, 'English': 41, 'art': 2}
要素を削除する
要素を削除するには次のようにします。
書式 del 辞書[キー]
実際に削除してみましょう。
subjects = {
"Japanese":68,
"Math":32,
"Social Studies":89,
"Science":91,
"English":41
}
del subjects["Social Studies"]
del subjects["Japanese"]
print(subjects)
{'Math': 32, 'Science': 91, 'English': 41}
また、pop()を使えばただ削除するだけでなく、辞書から要素を取り出しつつ削除することができます。
subjects = {
"Japanese":68,
"Math":32,
"Social Studies":89,
"Science":91,
"English":41
}
science_score = subjects.pop("Science")
print(subjects)
print(science_score)
{'Japanese': 68, 'Math': 32, 'Social Studies': 89, 'English': 41}
91
全ての要素を削除したい場合はclear()を使います。
subjects = {
"Japanese":68,
"Math":32,
"Social Studies":89,
"Science":91,
"English":41
}
subjects.clear()
print(subjects)
{}
全て消えると中括弧だけ残ります。
キーが存在するか確認する
存在しないキーで辞書を参照しようとすると「KeyError」になってしまいます。
try~catchで回避することも可能ですが、in演算子を使うことで、先にキーが存在するかどうかをチェックすることができます。
subjects = {
"Japanese":68,
"Math":32,
"Social Studies":89,
"Science":91,
"English":41
}
print("Japanese" in subjects) #存在する
print("Art" in subjects) #存在しない
True False
また、キーが存在する場合は値を取得し、存在しない場合はNoneを返すget()を使うこともできます。どういった方法でKeyErrorを回避するかはその時々によって変わってきます。
subjects = {
"Japanese":68,
"Math":32,
"Social Studies":89,
"Science":91,
"English":41
}
print(subjects.get("Japanese"))
print(subjects.get("Art"))
68
None