-1

私はこの辞書のリストを持っています:

L = [{'code': 'UE', 'country': 'France'}, {'code': 'AM', 'country': 'canada'}, {'code': 'AF', 'country': 'morocco'}]

次のようにソートされたコードのリストを取得する方法はありますcodes = ['AF', 'AM', 'UE']か?

4

3 に答える 3

4

ジェネレーターを に渡すことができますsorted:

>>> codes = sorted( d['code'] for d in L )
>>> codes
['AF', 'AM', 'UE']

別のオプションは、リスト内包表記を に渡すことsortedです。この場合、@MartijnPieters はこれがより高速であることを示しました。

codes = sorted([ d['code'] for d in L ])
于 2013-10-23T14:50:44.820 に答える
3

リスト内包表記を使用して必要なキーを選択し、値を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()ソートするにはリストが必要なので、リストを指定するか、イテラブルからリストを作成します。ジェネレーター式からリストを作成することは、最初にリストを与えるよりも (かなり) 効率的ではありません。

于 2013-10-23T14:50:24.357 に答える
1

sorted()リスト内包表記で関数を使用する:

>>> L = [{'code': 'UE', 'country': 'France'}, {'code': 'AM', 'country': 'canada'}, {'code': 'AF', 'country': 'morocco'}]
>>>
>>> sorted([d['code'] for d in L])
['AF', 'AM', 'UE']
于 2013-10-23T14:50:52.233 に答える