この章では、データ構造の辞書について説明します
辞書
Pythonには、複数のデータをまとめたデータを扱う型として、辞書型(ディクショナリ)
と呼ばれるデータ構造があります
キーとなる値と値をセットで一つの要素として持ちます
キーは一意でなければならず、各キーに対して一つの値が対応します
辞書型の特徴は以下の通りです
- 複数のデータを管理できる
- 要素を追加したり、削除することができる
- 同じキーを重複して格納することはできない
- キーとなる値を用いて値を参照することができる
辞書の作成方法
辞書は、波括弧 { } を使って作成し、キーと値をコロン : で区切ります
# キーと値が一組のとき
{キー:値}
# キーと値が複数組のとき
{キー:値,キー:値,,,}
# 空の辞書
{}
辞書を定義したサンプルプログラムを示します
dt = {"Jan":"January","Feb":"February","Mar":"March"}
print(dt)
print(type(dt))
実行結果
{'Jan': 'January', 'Feb': 'February', 'Mar': 'March'}
<class 'dict'>
値の取得
キーに対応する値は以下のように取り出します
辞書[キー]
以下にサンプルプログラムを示します
dt = {"Jan":"January","Feb":"February","Mar":"March"}
print(dt["Jan"])
print(dt["Feb"])
print(dt["Mar"])
実行結果
January
February
March
このサンプルプログラムでは、
キーの値「jan」:値「January」
キーの値「Feb」:値「February」
キーの値「Mar」:値「March」
を定義しています
dt[キー]と書くことで、それぞれの値が取得できています
キーが存在しない値を指定するとエラーが発生します
要素の更新・追加や削除
辞書への追加は以下のように記述します
辞書[キー] = 値
サンプルプログラムで要素の値を取得してみましょう
dt = {"Jan":"January","Feb":"February","Mar":"March"}
dt["Apr"]="April"
print(dt["Apr"])
print(dt)
実行結果
April
{'Jan': 'January', 'Feb': 'February', 'Mar': 'March', 'Apr': 'April'}
キーが「Apr」の要素が追加されています
キーがすでに存在している場合は値が更新されます
dt["Jan"]="January_1"
print(dt["Jan"])
print(dt)
実行結果
January_1
{'Jan': 'January_1', 'Feb': 'February', 'Mar': 'March', 'Apr': 'April'}
要素の削除は以下のようにdel文を記述します
del 辞書[キー]
del dt["Apr"]
print(dt)
実行結果
{'Jan': 'January_1', 'Feb': 'February', 'Mar': 'March'}
キーが存在しなければエラーが発生します
辞書の操作
辞書に適用できる便利な操作があります
代表的な操作をいくつか紹介します
1.辞書の要素数
以下のように記述することで、辞書に含まれる要素数が取得できます
len(辞書)
実際に辞書を定義して要素数を確認してみましょう
dt = {'Jan': 'January', 'Feb': 'February', 'Mar': 'March'}
print(len(dt))
実行結果
3
2.キーの存在確認
キーが存在するかどうかは以下のように記述します
# 存在するときTrueを返す
キー in 辞書
# 存在しないときTrueを返す
キー not in 辞書
辞書にキーが存在するかどうかを確認してみましょう
dt = {'Jan': 'January', 'Feb': 'February', 'Mar': 'March'}
print("Jan" in dt)
print("Apr" not in dt)
実行結果
True
True
3.キーの一覧の取得
キーの一覧を取得するにはkeys関数を使い以下のように記述します
辞書.keys()
辞書からキーの一覧を取得してみましょう
dt = {'Jan': 'January', 'Feb': 'February', 'Mar': 'March'}
key = dt.keys()
print(key)
print(type(key))
for k in key:
print(k)
実行結果
dict_keys(['Jan', 'Feb', 'Mar'])
<class 'dict_keys'>
Jan
Feb
Mar
keys()から取得した値は型がdict_keysの辞書ビューオブジェクトと呼ばれる辞書を閲覧するためのオブジェクトです
また、取得したキーの一覧から一つずつ取得するには in キーワードを使用してfor文で取得することができます
4.値の一覧の取得
値の一覧を取得するにはvalues関数を使い以下のように記述します
辞書.values()
辞書から値の一覧を取得してみましょう
dt = {'Jan': 'January', 'Feb': 'February', 'Mar': 'March'}
value = dt.values()
print(value)
print(type(value))
for v in value:
print(v)
実行結果
dict_values(['January', 'February', 'March'])
<class 'dict_values'>
January
February
March
型dict_valuesも辞書ビューオブジェクトと呼ばれる辞書を閲覧するためのオブジェクトの一つです
5.キーと値の組の一覧を取得
すべての(キー,値)の組み合わせを取得するにはitems関数を使い以下のように記述します
辞書.items()
辞書から(キー、値)の組の一覧を取得してみましょう
dt = {'Jan': 'January', 'Feb': 'February', 'Mar': 'March'}
item = dt.items()
print(item)
print(type(item))
for i in item:
print(i)
print(type(i))
実行結果
dict_items([('Jan', 'January'), ('Feb', 'February'), ('Mar', 'March')])
<class 'dict_items'>
('Jan', 'January')
<class 'tuple'>
('Feb', 'February')
<class 'tuple'>
('Mar', 'March')
<class 'tuple'>
型dict_itemsも辞書ビューオブジェクトと呼ばれる辞書を閲覧するためのオブジェクトの一つです
また、取得したitemはキーと値の組をタプルとして返してきています
キーと値を取得するため、以下のように記述することもできます
for key,value in dt.items():
print("key=" + key + ",value=" + value)
実行結果
key=Jan,value=January
key=Feb,value=February
key=Mar,value=March
dt.items()から一組のタプルを取得しkey,valueにアンパックしています
6.要素の取得
get関数を使って、要素の取得をする方法もあります
辞書[キー]で取得したときは、存在しないキーを指定した場合はエラーになりましたが、この関数を使用するとエラーが発生しません
辞書.get(キー)
辞書.get(キー,デフォルト値)
デフォルト値は、キーが存在しないときに代用として取得する値を設定しています
キーが存在する場合と存在しない場合で、それぞれデフォルトがある場合とない場合で動作を比べてみましょう
dt = {'Jan': 'January', 'Feb': 'February', 'Mar': 'March'}
print(dt)
print(dt.get("Jan"))
print(dt.get("Jan","January_1"))
print(dt.get("Apr"))
print(dt.get("Apr","April"))
実行結果
{'Jan': 'January', 'Feb': 'February', 'Mar': 'March'}
January
January
None
April
キーが存在する場合、デフォルト値の有無にかかわらず、キーに対応する値が取得できました
キーが存在しない場合、デフォルト値がない場合「None」、デフォルト値がある場合はキーに対応する値が取得できました
7.更新・追加
他の辞書のデータを使って辞書の要素の値を更新したり追加する場合、update関数を使用します
キーが存在していれば上書きされ、キーが存在しなければ追加されます
辞書.update(別の辞書)
キーが存在している要素と存在していない要素をもつ辞書をupdateで更新してみましょう
dt = {'Jan': 'January', 'Feb': 'February', 'Mar': 'March'}
other_dict = {'Mar': 'March_1',"Apr":"April","May":"May"}
dt.update(other_dict)
print(dt)
実行結果
{'Jan': 'January', 'Feb': 'February', 'Mar': 'March_1', 'Apr': 'April', 'May': 'May'}
キーが存在していた「Mar」の値はother_dictが持っている値「March_1」に変更になり、他は新しい要素として追加されました
8.削除
pop関数を使って要素を削除する方法もあります
指定したキーの要素を削除し対応する値を返します
キーが存在しない場合、デフォルト値が指定されていればデフォルト値を返し、デフォルト値がない場合はエラーを返します
辞書.pop(キー)
辞書.pop(キー,デフォルト値)
pop関数を試してみましょう
# 辞書の作成
dt = {'Jan': 'January', 'Feb': 'February', 'Mar': 'March_1',"Apr":"April","May":"May"}
# キーMarを削除
s1 = dt.pop("Mar")
print(dt)
print(s1)
# 存在するキーFebを削除、デフォルト値を指定
s2 = dt.pop("Feb","February_1")
print(dt)
print(s2)
# 存在しないキーJunを削除、デフォルト値を指定
s3 = dt.pop("Jun","June")
print(dt)
print(s3)
# 存在しないキーJulを削除、デフォルト値の指定なし
s4 = dt.pop("Jul")
print(dt)
print(s4)
キーが存在しているとき、指定したキーを持つ要素が削除され、デフォルト値の有無にかかわらず対応する値が取得できました
キーが存在しないとき、どの要素も削除されることはありません。また、デフォルト値の値が取得できました
一方、デフォルト値がない場合、エラーが発生しプログラムが終了しました
【演習問題】
辞書「{‘sunny’: ‘晴れ’, ‘rainy’: ‘雨’, ‘cloudy’: ‘曇り’, ‘Stormy’: ‘嵐’, ‘snowy’: ‘雪’}」を使い以下の演習問題を実施してみましょう
- キー「sunny」の値を取得する
実行結果
晴れ
- キー「Stormy」の要素を削除する
実行結果
{'sunny': '晴れ', 'rainy': '雨', 'cloudy': '曇り', 'snowy': '雪'}
削除した値は嵐
- キー「Windy」が存在するかチェックする
実行結果
存在しません
- 実行結果になるように表示する
実行結果
sunny -> 晴れ
rainy -> 雨
cloudy -> 曇り
Stormy -> 嵐
snowy -> 雪
コメント