私はこの辞書のリストを持っています:
L = [{'code': 'UE', 'country': 'France'}, {'code': 'AM', 'country': 'canada'}, {'code': 'AF', 'country': 'morocco'}]
次のようにソートされたコードのリストを取得する方法はありますcodes = ['AF', 'AM', 'UE']
か?
ジェネレーターを に渡すことができますsorted
:
>>> codes = sorted( d['code'] for d in L )
>>> codes
['AF', 'AM', 'UE']
別のオプションは、リスト内包表記を に渡すことsorted
です。この場合、@MartijnPieters はこれがより高速であることを示しました。
codes = sorted([ d['code'] for d in L ])
リスト内包表記を使用して必要なキーを選択し、値をsorted()
関数に渡します。
codes = sorted([d['code'] for d in L])
デモ:
>>> L = [{'code': 'UE', 'country': 'France'}, {'code': 'AM', 'country': 'canada'}, {'code': 'AF', 'country': 'morocco'}]
>>> sorted([d['code'] for d in L])
['AF', 'AM', 'UE']
ここでは、リスト内包表記はジェネレーター式よりも高速です。
>>> from timeit import timeit
>>> timeit("sorted(d['code'] for d in L)", 'from __main__ import L')
2.1713640689849854
>>> timeit("sorted([d['code'] for d in L])", 'from __main__ import L')
0.9132740497589111
sorted()
ソートするにはリストが必要なので、リストを指定するか、イテラブルからリストを作成します。ジェネレーター式からリストを作成することは、最初にリストを与えるよりも (かなり) 効率的ではありません。
sorted()
リスト内包表記で関数を使用する:
>>> L = [{'code': 'UE', 'country': 'France'}, {'code': 'AM', 'country': 'canada'}, {'code': 'AF', 'country': 'morocco'}]
>>>
>>> sorted([d['code'] for d in L])
['AF', 'AM', 'UE']