2011-09-01 189 views
61

的名单得到的值列表,我有这样的字典清单:蟒蛇从字典

[{'value': 'apple', 'blah': 2}, {'value': 'banana', 'blah': 3} , {'value': 'cars', 'blah':4}] 

我想['apple', 'banana', 'cars']

请告诉我要做到这一点的最好方法是什么?

+0

1)你有什么尝试?请包含您的代码。 2)在这种情况下,“最好”是一个毫无意义的词 - 最好可能意味着最快,最少的内存或最多使用Oracle许可的产品。我们不知道你认为你的意思是“最好的”。而且我们无法对您未发布的代码发表评论。 –

+4

也许他只是想问一下这是什么“pythonic”方法 –

+1

Mr S.Lott,有太多关于SO的问题,没有代码,但有答案,很好的答案,如果你不婉不会因为x或y发布答案,只是忽略此帖,这就是全部。 :v很多年前。 –

回答

129

假设每个dict有一个value键,你可以写(假设您的列表名为l

[d['value'] for d in l] 

如果value可能会丢失,您可以使用

[d['value'] for d in l if 'value' in d] 
+0

要处理键的缺失值,还可以使用d.get(“key_to_lookup”,“alternate_value”)。然后,它将如下所示:[d.get('value','alt')for d in l]。如果值不是键,它只会返回'alt'。 – abhinav

12
[x['value'] for x in list_of_dicts] 
+0

或[d.getkey('value')for dict_list] – rplnt

+0

@rplnt,Nope。 ':)' –

+0

@rpInt嗯,没有'getkey'这样的东西..你的意思是'd.get('value')'?这与@ isbadawi的第二个列表理解相同,而不是Michal的理解。 – agf

13

这里的另一种使用map()和lambda函数的方法:

>>> map(lambda d: d['value'], l) 

其中l是列表。 我看到这种方式“最性感”,但我会用列表理解。

更新: 在情况下“价值”可能缺少的一个关键应用:

>>> map(lambda d: d.get('value', 'default value'), l) 

更新:我也没有lambda表达式的忠实粉丝,我喜欢的东西的名字......这是我将如何考虑到这一点做到这一点:

>>> import operator 
>>> map(operator.itemgetter('value'), l) 

我会走得更远,并创建一个明确的说,我要达到什么样的一个唯一的功能:

>>> import operator, functools 
>>> get_values = functools.partial(map, operator.itemgetter('value')) 
>>> get_values(l) 
... [<list of values>] 
+0

毛!列表理解在这里更有意义。 –

+1

如果你打算使用第一个'map',使用'operator.itemgetter('value')',而不是'lambda'。 – agf

+0

用于通过'map'和'lambda'进行pythonic +1 – rickcnagy