こんにちは、森山です。
前回のコラムでは、8時限目に学んだリスト型を使った繰り返し処理を、1行でスマートに書く「リスト内包表記」について学びました。
今回は、リスト型と同じように複数のデータを扱いますが、番号ではなく「キー(目印)」でデータを管理する「辞書型(dict型)」について学んでいきましょう。
辞書型って何?
例えば広い体育館に生徒が10人いたとします。
そのうちの1人だけ指名する場合、もし生徒たちが一列に横並びで整列していたら、「左から3番目の人!」という指名ができますよね。
これが第8時限目で学んだ「リスト型」の考え方です。
リストは「整列していること」が条件で、0番、1番……という番号(インデックス)でデータを指定することができました。
では、もし生徒たちが整列していなくて、体育館の中でバラバラに散らばっていたらどうでしょうか?
「左から3番目の人」と番号で呼ぶことが難しくなってしまいます。でも、その人が持つ「1人しか持たない特徴」があれば指名できそうです。
例えば、全員が違う色の服を着ていたら「黄色い服の人!」と呼べば、特定の1人を指名できますよね。
この「黄色い服」のような目印をPythonでは「キー(Key)」と呼びます。そして、そのキーに対応する中身(生徒本人)を「値(Value)」と呼びます。
このキーと値のペアでデータを管理するのが「辞書型」の特徴です。
このデータ型であれば、整列していないデータでも特定の値だけを取り出すことができるようになります。
- リスト型: 番号(0, 1, 2, …)で中身を取り出す。
- 辞書型:キー(目印)で中身を取り出す。
学校で使用する国語辞典や英和辞典も、単語で調べるとその単語の意味が書かれていますよね。つまりキーと値のペアになっています。
キーで探すことで、キーとペアになっている値にアクセスすることができるようになります。
辞書の書き方のルール
辞書を作る時は、以下のルールで書きます。
- 全体を { }(波カッコ) で囲む。
- キー : 値 のように、コロン(:)でつなぐ。
- 複数のデータを入れる時は ,(カンマ) で区切る。
例えば、ある生徒の情報を辞書にするとこんな感じになります。
student = {
"name": "石川",
"color": "yellow",
"score": 85
}この例では、「”name”」や「”color”」がキーにあたります。リストと同じように、文字列、整数、小数など、違う型が混ざっていても大丈夫です。
データの取り出し方と「キー」のルール
辞書から特定のデータを取り出すには、番号ではなく「キー」を使います。
例えば、先ほどの student から名前を取り出したい時は、student["name"]と書きます。
しかしキーには大切なルールがあります。
辞書型では「同じキーを2つ以上使うことはできない」という決まりがあります。
体育館の例では「全員が違う色の服を着ている」という前提で服の色をキーにできました。
しかし黄色い服の生徒が2人いたら1人だけを指名することができません。つまりキーとは、中身を特定するためのユニークな(唯一の)目印でなければなりません。
実際にプログラムを動かしてみよう
今回は辞書型を使って、キャラクターのステータスを表示するプログラムを作ってみましょう。
# 辞書型でキャラクターのデータを作る
player = {
"name": "勇者",
"level": 10,
"item": "伝説の剣"
}
# キーを使ってデータを取り出す
print(f"名前: {player['name']}")
print(f"レベル: {player['level']}")
print(f"所持アイテム: {player['item']}")ここがポイント!
- { }(波カッコ)で囲み、キーと値を :(コロン)でつなぐことで辞書が作れます。
- 辞書から値を取り出すときは、
player['name']のように [ ] の中にキーの名前を指定します。 - キーが文字列(str型)の場合は、必ず ” “(引用符)で囲みます。
このコードをGoogle Colabで実行してみてください。キーを指定するだけで、必要な情報が取り出せる便利さが実感できるはずです。
辞書型を使えば「意味」を重視したデータを扱える
辞書型でわかりやすいキー名を設定すれば、プログラムの中で「これは何のデータなのか」をハッキリさせながら管理できるようになります。
今回学んだことを整理してみましょう。
- 辞書型: 「キー」と「値」をペアで持つ、目印付きの箱。
- { } で囲み、キーと値は 「:」 でつなぎ、データの間は 「,」 で区切る。
- キーは重複NG!(黄色い服の人は1人だけ)。
- 取り出す時は 変数名[キー] と書く。
リスト型が「順番」を重視するのに対し、辞書型は「名前(意味)」を重視します。この2つのデータ型を使い分けられるようになると、クラス全員分の詳細な成績データのようなより複雑なデータも扱えるようになってきます。
今回のコラムでは変数名[キー] という方法で値を取り出しましたが、ハイスクールPython5.3で紹介されているように辞書型にはget() などのメソッドというものを使った取り出し方法もあります。
for文と組み合わせて使われることも多いので、メソッドを使った取り出し方にもぜひ挑戦してみてください。
最後までお読みいただき、ありがとうございました。 それではまた次回お会いしましょう!
