keys() と sorted() の比較
前のステップでは、keys()
メソッドと sorted()
関数を組み合わせて、辞書をソートされた順序で反復処理する方法を学びました。このステップでは、keys()
を直接使用する場合と、keys()
と sorted()
を組み合わせて使用する場合の違いについて詳しく見ていきます。これらの違いを理解することは、効率的で読みやすい Python コードを書くために重要です。
keys()
メソッドはビューオブジェクトを返します。これは辞書のキーの動的なビューです。つまり、辞書が変更されると、ビューオブジェクトもその変更を反映します。ただし、ビューオブジェクト自体はリストではなく、直接ソートをサポートしていません。
一方、sorted()
関数は、イテラブルオブジェクトのすべての要素を昇順に並べた新しいリストを返します。sorted(my_dict.keys())
を使用すると、辞書のキーをソートした新しいリストが作成され、元の辞書とそのビューオブジェクトは変更されません。
これを例で説明しましょう。VS Code エディタを使用して ~/project
ディレクトリの sort_keys.py
ファイルを開き、以下のように変更します。
## Create a dictionary
my_dict = {"b": 2, "a": 1, "c": 3}
## Get the keys view object
keys_view = my_dict.keys()
## Print the keys view object
print("Keys view object:", keys_view)
## Print the sorted keys
sorted_keys = sorted(my_dict.keys())
print("Sorted keys:", sorted_keys)
## Modify the dictionary
my_dict["d"] = 4
## Print the keys view object again
print("Keys view object after modification:", keys_view)
## Iterate through the dictionary using the sorted keys
for key in sorted_keys:
print(f"Key: {key}, Value: {my_dict[key]}")
このコードでは、以下のことを行っています。
my_dict
という名前の辞書を作成します。
my_dict.keys()
を使用してキーのビューオブジェクトを取得し、keys_view
変数に格納します。
keys_view
オブジェクトと sorted_keys
リストを出力します。
- 新しいキー - 値のペアを追加することで辞書を変更します。
keys_view
オブジェクトを再度出力し、辞書の変更が反映されていることを示します。
- 最後に、
sorted_keys
リストを反復処理し、キー - 値のペアを出力します。sorted_keys
リストは変更されず、キー "d"
の追加が反映されていないことに注意してください。
次のコマンドを使用してスクリプトを実行します。
python sort_keys.py
以下の出力が表示されるはずです。
Keys view object: dict_keys(['b', 'a', 'c'])
Sorted keys: ['a', 'b', 'c']
Keys view object after modification: dict_keys(['b', 'a', 'c', 'd'])
Key: a, Value: 1
Key: b, Value: 2
Key: c, Value: 3
以下の点に注目してください。
keys_view
オブジェクトは辞書のキーの動的なビューです。辞書を変更すると、keys_view
オブジェクトはその変更を反映します。
sorted_keys
リストは、作成された時点のキーを含む静的なリストです。後で辞書に加えられた変更は反映されません。
- ループは
sorted_keys
が作成された時点で存在していたキーのみを反復処理します。
この例は、keys()
と sorted()
の主要な違いを強調しています。keys()
は動的なビューを提供し、sorted()
は静的なソートされたリストを作成します。辞書の変更を反映する必要があるか、固定されたソートされたキーのセットで作業する必要があるかに応じて、適切なメソッドを選択してください。