Python で辞書キーをリストとして取得する方法
-
Python 辞書キーを取得するための
dict.keys()
- Python 辞書キーを取得するループ
- 内包表記をリストして Python 辞書キーを取得する
-
キーを取得するための 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
上記のタイミングからわかるように、アンパック *
演算子が最速です。
他のアプローチのいずれかにフォールバックする正当な理由がない限り、それを優先してください。