辞書(dict)のforループ処理
Pythonで扱える辞書は、dict オブジェクトを使用しています。
リストと同じようにイテレーティブな処理が可能で、for 文で要素を一つずつ取り出し、
任意の処理を行うことができます。
for 文でイテレーティブ処理を行う場合、辞書 dict のメソッド keys(), values(), items() を使用します。
- keys():各要素のキー key に対して for ループ処理を行う
- values():各要素の値 value に対して for ループ処理を行う
- items():各要素のキー key と値 value に対して for ループ処理を行う
keys():各要素のキー key に対して for ループ処理を行う
Pythonでは、辞書オブジェクトをそのまま for 文でループさせてもキー key が取得できますが、
明示的に keys() メソッドを使って記述するのが一般的です。
1 2 3 4 5 6 7 8 9 10 11 12 |
animals = { 'cat': 'eye', 'dog': 'food', 'bird': 'watch', } for key in animals.keys(): print(key) # cat # dog # bird |
value():各要素の値 value に対して for ループ処理を行う
辞書 dict の各要素の値 value に対して for ループ処理を行う場合は、
dict オブジェクトの values() メソッドを使います。
1 2 3 4 5 6 7 8 9 10 11 12 |
animals = { 'cat': 'eye', 'dog': 'food', 'bird': 'watch', } for val in animals.values(): print(val) # eye # food # watch |
また、リストで扱いたい場合は、list() を使ってリスト化できます。
items():各要素のキー key と値 value に対して for ループ処理を行う
各要素のキー key と値 value の両方に対して for ループ処理を行いたい場合は、
items() メソッドを使います。
1 2 3 4 5 6 7 8 9 10 11 12 |
animals = { 'cat': 'eye', 'dog': 'food', 'bird': 'watch', } for key, val in animals.items(): print(key, val) # cat eye # dog food # bird watch |
(key, value) のタプル tuple として受け取ることもできます。
1 2 3 4 5 6 7 8 9 10 11 12 |
animals = { 'cat': 'eye', 'dog': 'food', 'bird': 'watch', } for tup in animals.items(): print(tup, tup[0], tup[1]) # ('cat', 'eye') cat eye # ('dog', 'food') dog food # ('bird', 'watch') bird watch |
辞書(dict)を for ループ処理するときの注意点
Python 3.5以前では、辞書 dict をイテレートすると任意の順序でキーが返されます。つまり、要素を挿入した順序とは無関係な順序でしかキーを取り出せないということです。
1 2 3 4 5 6 7 8 9 |
# Python 3.5 animals = { 'cat': 'eye', 'dog': 'food', } print(animals) # {'dog': 'food', cat': 'eye'} |
ポイント
辞書(dict)を for 文でループ処理する場合、挿入順序に依存してはいけない。
Python 3.5 以前の場合は、特に注意が必要です。
リストと異なり、Python の辞書(他言語ではハッシュテーブル等)dict は
格納順序を保証していないことを注意しながら扱いましょう。