如何从字典列表中提取特定键的所有值?

时间:2014-08-05 21:25:45

标签: python list dictionary

我有一个字典列表,这些字典在列表中都具有相同的结构。例如:

test_data = [{'id':1, 'value':'one'}, {'id':2, 'value':'two'}, {'id':3, 'value':'three'}]

我想从列表中的每个字典中获取每个value项:

['one', 'two', 'three']

我当然可以遍历列表并使用for循环提取每个值:

results = []
for item in test_data:
    results.append(item['value'])

但是我的数据集非常大。我想知道是否有更快的方法。

3 个答案:

答案 0 :(得分:21)

如果您只需要迭代一次值,请使用生成器表达式:

generator = ( item['value'] for item in test_data )

...

for i in generator:
    do_something(i)

另一个(深奥的)选项可能是mapitemgetter一起使用 - 它可能比生成器表达式略快,具体取决于具体情况:

from operator import itemgetter

generator = map(itemgetter('value'), test_data)

如果你绝对需要一个列表,列表理解比迭代list.append更快,因此:

results = [ item['value'] for item in test_data ]

答案 1 :(得分:8)

你可以这样做:

result = map (lambda x:x['value'],test_data)

答案 2 :(得分:0)

如果您的数据真的很大,generator会更有效:

list((object['value'] for object in test_data))

例如:

>>> list((object['value'] for object in test_data))
['one', 'two', 'three']

生成器部分是:

(object['value'] for object in test_data)

通过将其包装在list()中,您可以耗尽生成器并在数组中很好地返回其值。