辞書のクラスdictはキーに対して値が対応しているデータタイプです。Rubyではハッシュと呼ぶクラスと同じです。
次のコードはこれは文字列が1対1の例です。キー a-chan に対して値が Perfume 、キー KASHIYUKA に対して値が Perfume 、キー NOCCHi に対して値が Perfume が割り当てられています。a-chan は、すべて小文字、 KASHIYUKA は、すべて大文字、 NOCCHi は最後のiだけ小文字で表記します。
# File: dictsample.py
# dict (辞書)
# 1対1のマッピング
prfm={ 'a-chan': 'Perfume', 'KASHIYUKA': 'Perfume', 'NOCCHi': 'Perfume'}
print(prfm)キーの重複は出来ません。誤った例です。
# 誤った例
error_prfm={ 'Perfume':'A-CHAN', 'Perfume':'B-KASHIYUKA', 'Perfume':'C-NOCCHi'}
print(error_prfm)値にはキーでアクセスします。
# キー(Key)で値(Value)アクセス
print(prfm['a-chan'])
print(prfm['KASHIYUKA'])
print(prfm['NOCCHi'])既にある辞書へ新しい辞書を追加するにはメソッドupdate()を使用します。
# 辞書の追加
#
team_prfm_dict={ 'MIKIKO': 'Team Perfume'}
prfm.update(team_prfm_dict)
print(prfm)辞書の中にキーワードが含まれているのかチェックするときは ‘in’ を使います。prfmに対してキーがないものにアクセスすると、そこでエラーを起こしてしまいます。そこで辞書のキーがあるかどうか ‘not in’ で確認し、なければキーを追加して初期化を行う方法は次の通りです。
# キーがない場合はエラーになるので、まず辞書にあるかどうかを
# 確認する。なければ追加する。
if 'ystk' not in prfm:
prfm['ystk']= 'Team Perfume'
値は任意のオブジェクトが扱えます。次の例はタプルを値としています。
# タプルを値(Value)にした辞書
prfm_wt_dict={
2012: ('Perfume WORLD TOUR 1st','B00MXXEXUA'),
2013: ('Perfume WORLD TOUR 2nd','B00MXXEXUU'),
2014: ('Perfume WORLD TOUR 3rd','B00YRSC39W'),
2019: ('Perfume WORLD TOUR 4th 「FUTURE POP」','B07TGCNDS3')}次の例は、辞書からキーと値を取り出すループです。辞書を for 文で利用する時は、辞書クラスのメソッド items() メソッドを利用します。 items() が返却するのは dict_items クラスのインスタンスです。dict_items クラスは、繰り返しを行うことが可能なイテラブル( iterable / 意味 反復可能) なクラスです。 for 文のカウントとしてよく使われる range() が返却するのはイリタブルなrangeクラスなのと似ています。for 文に関してはこちらを参照してください。
# KeyとValueの参照の方法
for key,value in prfm_wt_dict.items():
print(key,"->",value)辞書をキーでソートしたい時、関数 sorted() を使います。sorted() はソートしたキーのリストを返します。
# キーがソートされてlistで返される
print(sorted(prfm_wt_dict))
published_years=sorted(prfm_wt_dict)辞書のインスタンス変数 prfm_wt_dict のキーを昇順で保持しているリスト published_years の最後をアクセスするには、インデックスに-1を指定します。
# 最後の(最新)のエントリー
# 最新のPerfumeが最高のPerfume
print(published_years[-1])
print(prfm_wt_dict[published_years[-1]])さて、下のコードは何を出力するでしょうか?
#動かさなくても何をしたいか大体見当がつくはず
live_title,amazon_dp=prfm_wt_dict[published_years[-1]]
print(live_title)
print("https://amazon.co.jp/dp/"+amazon_dp)