ディクショナリとは
Python におけるデータ集合を取り扱う仕組みとして、これまでは「リスト」や「タプル」について紹介してきました。今回はディクショナリについて学んでいきましょう。ディクショナリとは、文字通り「辞書」のようにデータを扱うコレクションの種類になります。
Python に関するその他の記事はこちらから。
ディクショナリの書き方
ディクショナリは、
ディクショナリ名 = {キー : 値, キー : 値, …}
というコードを書くことで定義することが出来ます。では、さっそくディクショナリを作成してみましょう。
temp_list = {"東京":26, "大阪":28, "名古屋":27, "仙台":23}
リストやタプルでは「添え字」と呼ばれる番号がデータの先頭から0, 1, 2 …と割り振られ1列に並んでいるイメージでしたが、ディクショナリでは添え字の代わりに「キー」と呼ばれる値を使ってデータを格納していきます。キーの値はわかりやすいものを 自分で決めることが出来ます。上記のコードであれば、「東京」というキーに整数の「26」というデータ(バリューと呼びます)が、「大阪」というキーに整数の「28」というデータが紐づいています。そして、
キーは重複できない
というルールがあるため注意が必要です。
ディクショナリの要素の取得・変更
ディクショナリのバリューを取得するためには、
ディクショナリ名[ キー ]
という記述をする必要があります。よって、
temp_list["東京"]
と記述すれば、整数の「26」を取得することが出来ます。また、
ディクショナリ名[ キー ] = 値
記述すれば、= 演算子の右辺に記述した値にバリューを上書きをすることが出来ます。
temp_list = {"東京":26, "大阪":28, "名古屋":27, "仙台":23}
temp_list["東京"] = 30
print(temp_list)
と記述すればターミナルには、
temp_list = {“東京”:30, “大阪”:28, “名古屋”:27, “仙台”:23}
と表示され、キーが”東京”に紐づいているバリューが「30」に変更されていることが確認できます。
存在しないキーを指定するとエラーになるため注意が必要です。
要素の追加・削除
ディクショナリの要素を追加するためには、
ディクショナリ名[ キー ] = 値
と記述します。「キー」の部分には、まだ存在しないキーを設定します。
temp_list = {"東京":26, "大阪":28, "名古屋":27, "仙台":23}
temp_list["福岡"] = 29
print(temp_list)
上記のように記述をすることで新たに「福岡」というキーと、整数の29というバリューのセットが追加されます。
実行するとターミナルには、
{‘東京’: 26, ‘大阪’: 28, ‘名古屋’: 27, ‘仙台’: 23, ‘福岡’: 29}
と表示されます。また、要素を削除する場合は、
del ディクショナリ名[ キー ]
と記述します。
temp_list = {"東京":26, "大阪":28, "名古屋":27, "仙台":23}
del temp_list["大阪"]
print(temp_list)
と記述すると、キーが大阪の要素が削除されるためターミナルには
{‘東京’: 26, ‘名古屋’: 27, ‘仙台’: 23}
と出力されます。
ディクショナリの高度な操作
ここまでは「キー」にフォーカスして操作することでディクショナリの内容を取得したり操作する方法を紹介してきました。最後に、少し高度なディクショナリの操作方法を紹介します。
① ディクショナリ名. keys() → キーを1つずつ返すしくみを取得する
② ディクショナリ名. values() → 値を1つずつ返すしくみを取得する
③ ディクショナリ名. items() → (キー, 値)となるタプルを1つずつ返すしくみを取得する
「返すしくみ」は、for文と合わせて使うケースがメジャーです。それぞれを使ったサンプルコードを見てみましょう。
temp_list = {"東京":26, "大阪":28, "名古屋":27, "仙台":23}
for k in temp_list.keys(): #キーを1つずつ返す
print(k, end=" ")
print()
for v in temp_list.values(): #バリューを1つずつ返す
print(v, end=" ")
print()
for i in temp_list.items(): #(キー, バリュー)となるタプルを1つずつ返す
print(i, end=" ")
上記を実行すると、
東京 大阪 名古屋 仙台
26 28 27 23
(‘東京’, 26) (‘大阪’, 28) (‘名古屋’, 27) (‘仙台’, 23)
とターミナルに表示されます。
forブロック内に記載されているprint()の end = ” ” という記述は、改行せずに(print()を実行すると出力処理は改行されます)半角スペースを入れる処理です。
3つのfor文の間に記述しているprint()は、逆に改行をするための処理です。
今回のように、格納したい値を要素番号以外で識別したい場合は、ディクショナリを使うと便利です。ぜひマスターしておきましょう。
コメント