2011-09-01 190 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