Python で辞書キーをリストとして取得する方法

Aliaksei Yursha 2023年1月30日
  1. Python 辞書キーを取得するための dict.keys()
  2. Python 辞書キーを取得するループ
  3. 内包表記をリストして Python 辞書キーを取得する
  4. キーを取得するための Python 辞書アンパック*演算子
  5. ランタイムパフォーマンスの比較
Python で辞書キーをリストとして取得する方法

辞書キーのビューをシーケンスとして取得することは、Python プログラミングの日常的な使用例です。

それを達成するためのいくつかのアプローチがあり、それぞれ異なるパフォーマンス特性があります。

Python 辞書キーを取得するための dict.keys()

dict.keys() 関数
辞書のキーの反復可能なビューである dict_keys を返します。

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> state_capitals.keys()
dict_keys(['California', 'Pennsylvania', 'Texas'])

リストに変換せずに、dict_keys を直接繰り返し処理できます。
多くのユースケースでは、API のリストの代わりに dict_keys をドロップでき、それは機能します。

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> for state in state_capitals.keys():
...   print(state)
...
California
Pennsylvania
Texas

リストのように厳密に辞書キーを操作する必要がある場合、たとえば
インデックスを使用してシーケンスから特定のキーを読み取ることができるようにするには、変換する必要があります
最初に dict_keys をリストに入れます。

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> list(state_capitals.keys())
['California', 'Pennsylvania', 'Texas']

リストとしてキーを取得する場合、dict.keys() の呼び出しはオプションです。
Python 辞書はキーに対して反復可能であるため、
辞書自体をリストコンストラクターに入れます。

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> list(state_capitals)
['California', 'Pennsylvania', 'Texas']

Python 辞書キーを取得するループ

Python の辞書に特有の特性は、それらを繰り返し処理すると、
あなたは彼らのキーを繰り返します。
したがって、すべての辞書キーを繰り返し処理することで簡単に収集できます。

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys = []
>>> for key im state_capitals:
...   keys.append(key)
...
>>> keys
['California', 'Pennsylvania', 'Texas']

内包表記をリストして Python 辞書キーを取得する

ループを使用する場合の構文上の改善は、Python のリスト内包表記を使用することです。
リスト内包表記を使用すると、上記のループを 1 行にまとめることができます。

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys = [key for key in state_capitals]
>>> keys
['California', 'Pennsylvania', 'Texas']

キーを取得するための Python 辞書アンパック*演算子

Python 3.5 以降では、unpacking *演算子を使用して辞書キーを保持できます。
この機能は PEP 448で導入されました-追加のアンパックの一般化。

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys = [*state_capitals]
>>> keys
['California', 'Pennsylvania', 'Texas']

このアプローチの利点は、タプルやセットなど、リストを超えて他のコレクションに辞書キーを展開できることです。

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys_tuple = *state_capitals,
>>> keys_tuple
('California', 'Pennsylvania', 'Texas')
>>> keys_set = {*state_capitals}
>>> keys_set
{'California', 'Pennsylvania', 'Texas'}

ランタイムパフォーマンスの比較

上記の各アプローチのランタイムパフォーマンスは異なります。

>>> from timeit import timeit
>>> timeit("list(state_capitals.keys())", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.25394885599962436
>>> timeit("list(state_capitals)", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.17995373999929143
>>> timeit("for key in state_capitals: keys.append(key)", setup="keys = []; state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.25294865500018204
>>> timeit("[key for key in state_capitals]", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.2447525150000729
>>> timeit("[*state_capitals]", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.0962776809992647

上記のタイミングからわかるように、アンパック *演算子が最速です。

他のアプローチのいずれかにフォールバックする正当な理由がない限り、それを優先してください。

関連記事 - Python Dictionary