我有这个字典列表:
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']