我有这个词典列表:
L = [{'code': 'UE', 'country': 'France'}, {'code': 'AM', 'country': 'canada'}, {'code': 'AF', 'country': 'morocco'}]
有没有办法检索这样排序的代码列表:codes = ['AF', 'AM', 'UE']
?
答案 0 :(得分:4)
您可以将生成器传递给sorted
:
>>> codes = sorted( d['code'] for d in L )
>>> codes
['AF', 'AM', 'UE']
另一种选择是将列表理解传递给sorted
,在这种情况下@MartijnPieters表示更快。
codes = sorted([ d['code'] for d in L ])
答案 1 :(得分:3)
使用列表推导选择所需的密钥,将值传递给sorted()
function:
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()
需要一个列表进行排序,因此要么给它一个列表,要么它将从迭代中构建一个列表。从生成器表达式构建列表(很多)比首先给它一个列表效率低。
答案 2 :(得分: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']