Pythonで辞書を繰り返し処理する方法

辞書はソフトウェア開発において最もよく使われるデータ構造の1つですが、これには 十分な理由があります。その理由は、データをキーと値のペアできちんと格納できるため、平均して O(1) 時間でデータにアクセスできるようになるためです。

辞書を使用する際には、それをどのように反復処理するかを知っておくことが重要です。保存したデータを復元できないのでは、実質的に意味がありません。

この記事では、様々な種類のイテレータと for ループを使用して Python 辞書を反復処理する方法を紹介します。

キー()メソッドの使用

Python の辞書には、 keys() という便利なメソッドがあり、これを使うと初期化されたすべてのキーを簡単に反復処理することができます。

Python 3以降、このメソッドはリストを返さず、代わりにビューオブジェクトを返すことを覚えておいてください。ビューオブジェクトはその名の通り、あるデータのビューです。

つまり、そのデータを反復処理することは問題ありませんが、キーのリストを実際に保存したいのであれば、それを実体化する必要があります。これは、提供されたビューオブジェクトを list コンストラクタに転送することで簡単に行うことができます。

それでは、どのように動作するのか見ていきましょう。

my_dict = {'alpha': 5, 'beta': 4, 'gamma': 3}


# Here we're just 'looking' at the keys,
# we're not actually constructing a list 
# out of them
key_view = my_dict.keys()
print("Key view:", key_view)
print("Type:", type(key_view),end="

")


# Here we're materializing the keys
# into a list ofo keys
key_list = list(my_dict.keys())
print("Key list:", key_list)
print("Type: ", type(key_list),end="

")


# And as we can see, view can be easily be
# used for iterating over a dictionary
for key in my_dict.keys():
    print(key, ':', my_dict[key])


このコードを実行すると、次のような出力が得られます。

Key view: dict_keys(['alpha', 'beta', 'gamma'])
Type: <class 'dict_keys'=""


Key list: ['alpha', 'beta', 'gamma']
Type:  <class 'list'=""


alpha : 5
beta : 4
gamma : 3


別の方法として、次のようにすることもできます。

my_dict = {'alpha': 5, 'beta': 4, 'gamma': 3}


for key in my_dict:
    print(key, ':', my_dict[key])


キーワード in を辞書と組み合わせて使用すると、辞書はその __iter__() メソッドを呼び出します。このメソッドはイテレータを返し、このイテレータは与えられた辞書のキーを暗黙のうちに調べていくのに使われます。

values() メソッドの使用法

keys()メソッドと同様にvalues()` メソッドもビューオブジェクトを返しますが、キーを順に並べるのではなく、値を順に並べます。

my_dict = {'alpha': 5, 'beta': 4, 'gamma': 3}


# Inspecting the view of the values
# in the dictionary
key_list = list(my_dict.values())
print("Value list:", key_list)
print("Type: ", type(key_list), end="

")


for value in my_dict.values():
    print(value, end=" ")


このコードを実行すると、次のような出力が得られます。

Value list: [5, 4, 3]
Type:  <class 'list'=""
5 4 3


前のメソッドとは異なり、このメソッドは値のみを提供します。キーにこだわらない場合に便利です。

items() メソッドを使用する

しかし、単に keysvalues を反復処理するのではなく、 (key,value) のペアを反復処理します。

それでは、その仕組みを見ていきましょう。

my_dict = {'alpha': 5, 'beta': 4, 'gamma': 3}


# Inspecting the view of the (key,value) pairs
key_list = list(my_dict.items())
print("(key,value) pair list:", key_list)
print("Type: ", type(key_list), end="

")


for item in my_dict.items():
    print(item, end=" ")


このコードを実行すると、次のような出力が得られます。

(key,value) pair list: [('alpha', 5), ('beta', 4), ('gamma', 3)]
Type:  <class 'list'=""
('alpha', 5) ('beta', 4) ('gamma', 3)


キーと値を同時に即座に割り当てるには、タプルのアンパッキングを使って、タプルの各値に変数を使用してそれらを抽出することができます。

for key, value in my_dict.items():
    print(key,':',value)


Python 2の古いバージョンでは、 items(), keys(), values() は辞書からデータのコピーを返していたことに注意することが重要です。一方、Python 3 では、これらのオブジェクトはビューオブジェクトを返します。

これらは動的なビューを提供し、さらに元の辞書に変更があった場合、すぐにビューオブジェクトに反映されるため、より効果的です(逆もまた然り)。

結論

この記事では、Pythonの辞書を繰り返し処理するさまざまな方法について説明しました。これには keys(), values(), items() メソッドと、 for ループが含まれます。

</strong

タイトルとURLをコピーしました