MENU

1-16 辞書型データ

ファイル名: 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で、namescore のセットを順番に取り出すというコードです。

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

コメント

コメントする