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

Python 如何根据字典中的元素创建列表?,python,django,Python,Django,我有以下词典列表: L = [{'code': 'UE', 'country': 'France'}, {'code': 'AM', 'country': 'canada'}, {'code': 'AF', 'country': 'morocco'}] 是否有任何方法可以检索这样排序的代码列表:code=['AF'、'AM'、'UE']?使用列表理解选择所需的键,将值传递给: 演示: 在这里,列表理解比生成器表达式更快: >>> from timeit import time

我有以下词典列表:

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

是否有任何方法可以检索这样排序的代码列表:
code=['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()。从生成器表达式生成列表的效率(要低得多)低于首先给它一个列表。

您可以将生成器传递给排序的

>>> codes = sorted( d['code'] for d in L )
>>> codes
['AF', 'AM', 'UE']
另一个选项是将列表理解传递给排序后的
,@MartijnPieters在本例中显示出更快

codes = sorted([ d['code'] for d in L ])
在列表理解中使用
sorted()
函数:

>>> L = [{'code': 'UE', 'country': 'France'}, {'code': 'AM', 'country': 'canada'}, {'code': 'AF', 'country': 'morocco'}]
>>>
>>> sorted([d['code'] for d in L])
['AF', 'AM', 'UE']

这不是一个列表理解;你有一个生成器表达式。生成器应该更高效,我想。啊,谢谢。在我意识到他想要对列表进行排序并且只需要一个生成器之前,我就写下了列表理解。@hunse:不,事实上。列表比较快。@MartijnPieters:为什么?-1应该演示您迄今为止所做的尝试以及为什么不起作用。@ErikAllik:我甚至不知道这是否可行,然后我得到了回应!为了知道某事是否可能,你必须尝试;如果你失败了,你会问。那么
list()
不等于
[]
?或者,为什么将genexp传递给排序后的
比先将其转换为列表然后再传递该列表要慢?我想对此进行评论,因为对于带有生成器的列表,诸如
join
之类的方法更快。对于排序后的
,它也有意义,因为排序需要实际的列表。是的,你说得对,列表理解更快。我尝试了一个更大的字典列表(即100000个元素),然后速度差异可以忽略不计,但仍然稍微有利于列表理解。
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']