2011-10-26 46 views
9

假設你有這樣一個字典列表:提取物項

a = [ {'name':'pippo', 'age':'5'} , {'name':'pluto', 'age':'7'} ] 

你怎麼從該名單中只提取字典,其中name ==冥王星? 爲了讓事情有點困難,認爲我不能做任何進口

+0

你想要提取什麼? :/ –

+0

字典,即{'name':'pluto','age':'7'} –

回答

18

列表理解是非常理想的:

[d for d in a if d['name'] == 'pluto'] 
+3

這是'如果'不是'在哪兒'。編輯:我看你修好了。值得一提的是,這仍然是一個列表,因爲可能有多個結果與該值 - 如果您確定只有一個,並且只需要一個,只需訪問新列表中0位置的元素即可。 –

+0

太棒了!你解決了我的問題,謝謝! –

+0

@Lattyware是的,我一看到它就編輯它。你很快就會注意到:)是的,它會產生一個列表。如果結果是空列表,直接使用[0]是很危險的。你可以在結果中使用'x = x [0]'如果x else {}'。或者,如果'name'是唯一的,那麼'[x] = [d在if中d ['name'] =='pluto']或[{}]' – rplnt

1
[d for d in a if d['name'] == 'pluto'] 
1
​​
+0

鑑於 他們沒」沒有說明,人們會假定他們想要提取整個詞典,但是如果他們想要特別的東西,那麼這是一個很好的解決方案。 –

1

使用列表理解其中挑選出正確的字典在字典列表中。

>>> [d for d in a if d['name']=='pluto'] 
[{'age': '7', 'name': 'pluto'}] 

或者,如果你不知道,如果在所有的a類型的字典有一個「名稱」鍵,

>>> [d for d in a if d.get('name')=='pluto'] 
[{'age': '7', 'name': 'pluto'}] 

注意,這兩個返回列表。如果你知道,世界上只有一個匹配項,您可以添加[0]到最後返回實際字典:

>>> [d for d in a if d['name']=='pluto'][0] 
{'age': '7', 'name': 'pluto'} 
8

除了列表理解,其他的反應給你,你也可以用做過濾器和一個拉姆達:

filter(lambda x: x.get('name') == 'pluto',a)