如何根据字典中的元素创建列表?

时间:2013-10-23 14:49:28

标签: python django

我有这个词典列表:

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

有没有办法检索这样排序的代码列表:codes = ['AF', 'AM', 'UE']

3 个答案:

答案 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']