Pythonの辞書型について

どうも、Rerurate_514です。(HN Rerurate_514)
皆さん今日の2年生の授業では辞書型というものを扱ったかと思いますが、わからない人向けに改めて解説したいと思います。

まず辞書型とはキーと値がセットになったリスト構造のことです。
この辞書型の利点として、配列のようにindexを管理しなくてもよかったり、入れ子構造が柔軟であるというものがあります。
例を示します。
例えば配列で学生の情報を管理したいときにはこうなるかと思います。

# index:内容
# 1:学生番号
# 2:名前
# 3:数学の点数
# 4:情報の点数
 
students[0][0] = 2312130

これでも管理はできるかもしれないですが、配列のindexが学生番号と紐づいてなくて管理しづらかったり、いちいちどこのindexに何が格納されているかを覚えたりしなくてはならないです。

これを解決するのが辞書型という考え方です。

この方法だと何がどこに格納されているかがプログラムからわかります。
こうすることによって管理しやすくなるのです。

もっと言うならば、このキーの文字列も定数で管理したほうがいいです。

student_num = 2312130
NAME = "name"
SCORE = "score"
MATH = "math"
INFO = "info"
 
students = {}
students[student_num] = {}
students[student_num][NAME] = "reru"
students[student_num][MATH] = 64
students[student_num][INFO] = 86

定数を使用するとVSCode上で補完が載るのでキーを誤字って動かなくなるバグがなくなります。
Anacondaは知りません。

因みにこのコードの中身を出力してみると

{ 2312130: {"name":"reru", "math":64, "info":86}}

となります。

そして辞書型は最初から入れ子にキーで値を入れられないんですよね。
例えば、

students[2312130][NAME] = "reru"

とかはできないです。Type Errorと出てしまいます。
これを解決するには

NAME = "name"
students = {}
students[2312130] = {}
students[2312130][NAME] = "reru"
 
print(NAME + " = " + students[2312130][NAME])

と一旦初期化しないといけないです。
自分はこの修正に時間がかかってしまいました。

JSで5個ぐらい辞書型をくっつけたときは初期化した覚えがなかったですが。。。

辞書型にも多分ビルトイン関数とかあると思いますが、自分はあまりListの関数ほど使用していないのであまり分かりません。