-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 回答