ファイル名: note15.ipynb
前回の内容では、複数のデータをリストで管理する方法を学習しました。
単一種類のデータならリストで管理することは容易ですが、たとえば「生徒」と「点数」という二つ以上のデータの間に関係がある場合に、リストで管理すると、どのデータとどのデータが紐づいているのかがすぐに分かりません。
names = ["Tanaka", "Suzuki", "Sato"]
scores = [80, 90, 75]
⚠ どれが誰の点数か分かりにくい
⚠ 順番がずれるとバグになる
リストは、「順序があるデータの集まり」
辞書は、「対応関係があるデータの集まり」です。
1. 辞書型; 「鍵」と「値」のセット
辞書型データは、「名前」という「鍵(Key)」と「値(Value)」をセットにしたものです。
scores = {
"Tanaka": 80,
"Suzuki": 90,
"Sato": 75
}
ルールは、
✔ {} を使う
✔ キー: 値 の形
✔ カンマで区切る
名前と点数が一緒になっているので、名前から点数をすぐに取り出すことができます。
scores = {
"Tanaka": 80,
"Suzuki": 90,
"Sato": 75
}
print(scores["Tanaka"])
2. 辞書型の基本操作
追加
データの追加は「鍵(Key)」を使って行います。
scores = {
"Tanaka": 80,
"Suzuki": 90,
"Sato": 75
}
scores["Yamada"] = 88
変更
既に記録されている値(Value)の変更
scores = {
"Tanaka": 80,
"Suzuki": 90,
"Sato": 75
}
scores["Tanaka"] = 1000
print(scores)
削除
登録されているデータの削除は「鍵(Key)」を削除すれば、紐づいているデータも削除されます。
scores = {
"Tanaka": 80,
"Suzuki": 90,
"Sato": 75
}
del scores["Sato"]
print(scores)
3. for との組み合わせ
リストと同じように for文を使って、繰り返し作業ができます。
鍵(Key)の一覧
scores = {"Tanaka": 80,"Suzuki": 90,"Sato": 75}
for name in scores:
print(name)
鍵(Key)と値(Value)の一覧
scores = {"Tanaka": 80,"Suzuki": 90,"Sato": 75}
for name, score in scores.items():
print(name, score)
scores.items() とは、鍵(Key)と値(Value)のペアのリストです。形としては以下のようなものです。
("Tanaka", 80)
("Suzuki", 90)
このリストから、 forで、nameとscore のセットを順番に取り出すというコードです。
scores というリストには、元々name や score という名前はつけてありませんので、for 文の1行目はこのように書いても同じです。
scores = {"Tanaka": 80,"Suzuki": 90,"Sato": 75}
for x, y in scores.items():
print(x, y)
4. 辞書の「値(Value)」は文字列でも可
辞書の値は文字列であっても構いません。
address = {
"Tanaka": "Nara",
"Suzuki": "Kyoto",
"Sato": "Osaka"
}
for x, y in address.items():
print(x, y)
5. 辞書の「値(Value)」はリスト(複数の値)であってもよい
辞書の値はリストにして、複数の値を持たせることもできます。
records = {
"Tanaka": [80,85,40],
"Suzuki": [50,70,30],
"Sato": [90,5,80]
}
for x, y in records.items():
print(x, y)
このようにすると、それぞれの生徒の1学期、2学期、3学期の成績をまとめて管理することができます。
a. 「値(Value)」であるリストの表示方法
それぞれの「値(Value)=リスト」を表示するには、「鍵(Key)」を使って呼び出します。
records = {
"Tanaka": [80,85,40],
"Suzuki": [50,70,30],
"Sato": [90,5,80]
}
print(records["Suzuki"])
records["Suzuki"] はリストであるので、その2つめの値を表示したいときのインデックスは、[1]なので、
records = {
"Tanaka": [80,85,40],
"Suzuki": [50,70,30],
"Sato": [90,5,80]
}
print(records["Suzuki"][1])
b. 辞書→リストのデータの追加
値(Value)がリストであったとしても、操作は同じです。データの追加は、以下のように書きます。
records = {
"Tanaka": [80,85,40],
"Suzuki": [50,70,30],
"Sato": [90,5,80]
}
records["Yamada"]=[100,100,100]
for x, y in records.items():
print(x, y)
c. 辞書→リストのデータの削除
データの削除はdelでしたね。
records = {
"Tanaka": [80,85,40],
"Suzuki": [50,70,30],
"Sato": [90,5,80]
}
del records["Suzuki"]
for x, y in records.items():
print(x, y)
d. 辞書→リストの値を一部変更する方法
辞書データの一部を変更するにはどうすればよいのか考えてみましょう。上記のrecordsのデータでSatoの5点が50点の間違いだったと気づき、変更する方法を考えます。
辞書recordsから、Satoのデータを取り出すと、5はインデックスで言えば[1]になります。
records["Sato"]
[90, 5, 80]
0 1 2
ですので、Satoの[1]を変更するには、以下のように書きます。
records["Sato"][1] = 50

コメント