(1) ディクショナリーの基本
リストは要素が順番通りに格納されていて、要素を取り出すためにはインデックス番号を指定する必要がありました。ディクショナリーは、リストと同様に1つの変数の中に複数の要素を格納することができますが、キー(任意の文字列)を指定して値を出し入れすることができます。
ディクショナリーの定義
ディクショナリーは{ }(波括弧)で定義し、各要素はキーと値をコロン:で組み合わせて書きます。
ディクショナリー名 = {キー1: 値1, キー2: 値2, キー3: 値3, … }
ディクショナリー内の値の取り出し
ディクショナリーの中の値を取り出すときは、ディクショナリー名[キー]のように書きます。
値 = ディクショナリー名[キー]
ディクショナリーの定義と値の取得の例
あるテーマパークの1日券は次の通りです。
幼児(3歳以下)は無料、小人(小学生以下)は5,000円、中人(中高生)は7,000円、一般は8,400円。
ディクショナリーpricesを定義して中人の料金を出力するプログラムを書きなさい。
prices = {"幼児": 0, "小人": 5000, "中人": 7000, "一般": 8400}
print(prices["中人"])
7000
存在しないキー
ディクショナリー内に存在しないキーで値を取り出そうとするとエラーになります。
prices = {"幼児": 0, "小人": 5000, "中人": 7000, "一般": 8400}
print(prices["大学生"])
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-105-6a7b4965809b>
<ipython-input-105-6a7b4965809b> in <module><module>
1 prices = {"幼児": 0, "小人": 5000, "中人": 7000, "一般": 8400}
2
----> 3 print(prices["大学生"])
KeyError: "大学生"
ディクショナリーの表示
ディクショナリーのすべてのキーと値を表示するには、print(ディクショナリー名)と書きます。
prices = {"幼児": 0, "小人": 5000, "中人": 7000, "一般": 8400}
print(prices)
{"幼児": 0, "小人": 5000, "中人": 7000, "一般": 8400}
(2) ディクショナリーの取り扱い
ディクショナリー内の値の書き換え
ディクショナリー内の値を書き換えるときは、次のようにします。
prices = {"幼児": 0, "小人": 5000, "中人": 7000, "一般": 8400}
prices["幼児"] = 1000
print(prices)
{"幼児": 1000, "小人": 5000, "中人": 7000, "一般": 8400}
ディクショナリーへの追加
ディクショナリーにキーと値を追加する場合は、次のようにします。
prices = {"幼児": 1000, "小人": 5000, "中人": 7000, "一般": 8400}
prices["大学生"] = 7400
print(prices)
{"幼児": 0, "小人": 5000, "中人": 7000, "一般": 8400, "大学生": 7400}
getメソッドによる値の取得
getメソッドは ディクショナリー名.get("キー")のように書き、ディクショナリーの中の値をキーを指定して取得します。
prices = {"幼児": 1000, "小人": 5000, "中人": 7000, "一般": 8400}
print(prices.get("中人"))
7000
ディクショナリー名[キー]で存在しないキーを指定するとエラーが起きてしまいます。しかし、getメソッドで存在しないキーで値を取り出したときにはNoneとなります。Noneという値は存在しないことを表す値で、0(ゼロ)や空文字とも異なります。
prices = {"幼児": 1000, "小人": 5000, "中人": 7000, "一般": 8400}
print(prices.get("大学生"))
None
setdefaultメソッド
ディクショナリー名.setdefault(キー, 値)で指定したキーが存在しない場合には新たにキーと値を追加し、追加した要素の値を戻り値として返します。キーが存在する場合には、キーの値を返します。
#setdefaultの例(キーが存在しない場合)
prices = {"幼児": 1000, "小人": 5000, "中人": 7000, "一般": 8400}
ret = prices.setdefault("大学生", 7400)
print(prices)
print(ret)
{"幼児": 0, "小人": 5000, "中人": 7000, "一般": 8400, "大学生": 7400}
7400
#setdefaultの例(キーが存在する場合)
prices = {"幼児": 0, "小人": 5000, "中人": 7000, "一般": 8400}
ret = prices.setdefault("小人", 7400)
print(prices)
print(ret)
{"幼児": 0, "小人": 5000, "中人": 7000, "一般": 8400}
5000
キーの存在確認
比較演算子inを用いて、ディクショナリー内にキーが存在するかどうかを確認します。存在する場合にはTrue値となり、存在しない場合はFalse値となります。
#キーの存在確認(存在する場合)
prices = {"幼児": 0, "小人": 5000, "中人": 7000, "一般": 8400}
exists = "中人" in prices
print(exists)
True
#キーの存在確認(存在する場合)
prices = {"幼児": 0, "小人": 5000, "中人": 7000, "一般": 8400}
exists = "大学生" in prices
print(exists)
False
値の削除(del文)
ディクショナリーの中のキーと値を削除するときは、del文を使います。
prices = {"幼児": 0, "小人": 5000, "中人": 7000, "一般": 8400}
del prices["中人"]
print(prices)
{"幼児": 0, "小人": 5000, "一般": 8400}
キーのリストを取得する
keys()メソッドを用いると、ディクショナリーの中のすべてのキーをリストとして返します。
#keys()メソッド
prices = {"幼児": 0, "小人": 5000, "中人": 7000, "一般": 8400}
keys = prices.keys()
print(keys)
for key in keys:
print(key)
dict_keys(["幼児", "小人", "中人", "一般"])
幼児
小人
中人
一般
値のリストを取得する
values()メソッドを用いると、ディクショナリーの中のすべての値をリストとして返します。
#values()メソッド
prices = {"幼児": 0, "小人": 5000, "中人": 7000, "一般": 8400}
values = prices.values()
print(values)
for value in values:
print(value)
dict_values([0, 5000, 7000, 8400])
0
5000
7000
8400
(3) ディクショナリーとfor文
ディクショナリー内の各要素をすべて取り出す
ディクショナリー内の各キーを取り出すときは、次のようにします。
for キー変数 in ディクショナリー名:
# ディクショナリー内の各キーを順にキー変数に入れて処理する
ディクショナリー名[キー変数] # キーを使って要素を取り出す
ディクショナリー内の各要素をすべて取り出す
あるテーマパークの土曜と日曜の1日券は次の通りです。
幼児(3歳以下) 無料、小人(小学生以下) 5,000円、中人(中高生) 7,000円、一般 8,400円
平日は2割引の料金が適用されます。各区分の平日の料金と土日の料金をそれぞれ表示しなさい。
prices = {"幼児": 0, "小人": 5000, "中人": 7000, "一般": 8400}
for key in prices:
weekend_price = prices[key]
weekday_price = int(weekend_price * 0.8)
print(key, "は、平日:", weekday_price, "円, 土日:", weekend_price, "円")
幼児 は、平日: 0 円, 土日: 0 円
小人 は、平日: 4000 円, 土日: 5000 円
中人 は、平日: 5600 円, 土日: 7000 円
一般 は、平日: 6720 円, 土日: 8400 円