Python 辞書の使い方
はじめに
連続した値をキーとバリュー(値)のペアとして保持可能な辞書の使い方について、サンプルコードを用いて説明します。
記述方法
辞書の記述方法は以下の通りです。
- {}(波かっこ)でくくる
- キー・バリュー・ペア(キーと対応する値の組)をカンマで区切る
- キーとバリューを:(コロン)で区切る
book = {'title': 'python sample', 'auther': 'tanaka taro', 'price': 2980} # 辞書の作成
初期化
以下のようにキーと値を含まない波かっこを指定するとリストを初期化できます。この状態ではsample
は要素を持たない空の辞書の状態です。
sample = {} # 空の辞書を作成
値の取得
以下のようにキーを指定することで、値を取得できます。
book = {'title': 'python sample', 'auther': 'tanaka taro', 'price': 2980} print(book['title']) # 'title'の値を取得
python sample
存在しない要素を指定すると、KeyErrorというエラーが発生します。
キーと値をリスト形式で取得
キーの取得
keys()
メソッドを利用することで、キーをリスト形式で取得できます。
book = {'title': 'python sample', 'auther': 'tanaka taro', 'price': 2980} for k in book.keys(): print(k) # キーを表示
title auther price
値の取得
values()
メソッドを利用することで、値をリスト形式で取得できます。
book = {'title': 'python sample', 'auther': 'tanaka taro', 'price': 2980} for v in book.values(): print(v) # 値を表示
python sample tanaka taro 2980
キー・バリュー・ペアの取得
items()
メソッドを利用することで、キーと値をリスト形式で取得できます。リストの各要素には、キーと値がタプル形式で格納されています。forループで以下のように指定することで、キーと値を同時に取得できます。
book = {'title': 'python sample', 'auther': 'tanaka taro', 'price': 2980} for k, v in book.items(): print(k + ':' + str(v)) # キー・バリュー・ペアを表示
title:python sample auther:tanaka taro price:2980
keys()
、values()
、items()
メソッドが返す値はリスト形式、タプル形式です。実際のリスト、タプルとは異なり、list.append()
のような処理は実行できません。以下のコードを見てわかる通り、型が
dict_keys
のようになっており通常のリストやタプルとは異なります。
print(book.keys()) # key()の戻り値を表示 print(book.values()) # values()の戻り値を表示 print(book.items()) # items()の戻り値を表示
dict_keys(['title', 'auther', 'price']) dict_values(['python sample', 'tanaka taro', 2980]) dict_items([('title', 'python sample'), ('auther', 'tanaka taro'), ('price', 2980)])
値の登録
キーが存在している場合も必ず登録
辞書[登録するキー] = 登録する値
のように記述することで、辞書にキーと値を登録できます。
book = {'title': 'python sample', 'auther': 'tanaka taro', 'price': 2980} book['date'] = '2021/01/20' # キーと値を登録 print(book)
{'title': 'python sample', 'auther': 'tanaka taro', 'price': 2980, 'date': '2021/01/20'}
ただしこのやり方では、すでにキーが存在している場合でも値を上書きしてしまいます。
book = {'title': 'python sample', 'auther': 'tanaka taro', 'price': 2980} book['price'] = 5000 # すでに存在するキーに値を登録 print(book)
{'title': 'python sample', 'auther': 'tanaka taro', 'price': 5000}
キーが存在しない場合のみ値を登録したい場合はsetdefault()
メソッドを利用します。
キーが存在しない場合のみ登録
setdefault()
メソッドを利用すると、キーが存在しない場合のみ、値を登録することができます。このためget()
メソッドと同様、コードを簡潔に記述できます。
以下の実行結果の通り、キーが存在しない'auther'は登録されていますが、すでにキーが存在する'price'の値は変更されていません。
book = {'title': 'python sample', 'price': 2980} book.setdefault('auther', 'tanaka taro') book.setdefault('price', 5000) # すでに存在するキーに値を登録 print(book) # 変更後の辞書を表示
{'title': 'python sample', 'price': 2980, 'auther': 'tanaka taro'}
キーや値の検索
in
演算子やnot in
演算子を利用することで、辞書にキーや辞書が含まれているかを検索できます。
以下は説明を簡略化するためにin
演算子やnot in
演算子のみを直接利用していますが、実際にはif文など条件文と組み合わせて利用することが多いと思います。
キーを検索したい場合はkeys()
メソッドを利用するか、単純に辞書を指定します。値を検索したい場合はvalues()
メソッドを利用します。
book = {'title': 'python sample', 'auther': 'tanaka taro', 'price': 2980} print('title' in book.keys()) # キーに'title'が存在するか print('auther' not in book.keys()) # キーに'auther'が存在しないか(False=存在する) # 以下も同じ結果が得られる # print('title' in book) # print('auther' not in book) print('tanaka taro' in book.values()) # 値に'title'が存在するか print(2980 not in book.values()) # 値に2980が存在しないか(False=存在する)
True False True False
キーが存在しない場合の戻り値を指定
get()
メソッドを利用すると、キーが存在しない場合の戻り値を指定できます。キーが存在しない場合でもKeyErrorが発生しないため、コードを簡潔に記述できます。
book = {'title': 'python sample', 'price': 2980} print('title is ' + book.get('title', 'none') + '.') # 'title'が存在しない場合はnoneを返す print('auther is ' + book.get('auther', 'none') + '.') # 'auther'が存在しない場合はnoneを返す
title is python sample. auther is none.
キーと値の入れ替え
以下のようにfor文を利用すればキーと値を入れ替えることができますが、これは少々冗長です。
book = {'title': 'python sample', 'auther': 'tanaka taro', 'price': 2980} book_replaced = {} for k, v in book.items(): book_replaced[v] = k print(book_replaced) # キーと値を入れ替えた辞書を表示
{'python sample': 'title', 'tanaka taro': 'auther', 2980: 'price'}
キーと値を入れ替えたい場合は、以下のようにすると1行で記述できます。
book = {'title': 'python sample', 'auther': 'tanaka taro', 'price': 2980} book_replaced ={v: k for k, v in book.items()} print(book_replaced) # キーと値を入れ替えた辞書を表示