2011-10-26 13 views
9

मान लीजिए आप एक इस तरह शब्दकोशों की सूची है? एक छोटा सा कठिन चीजों को बनाने के लिए, पर विचार है कि मैं किसी भी आयात नहीं कर सकतेनिकालने आइटम

+0

आप क्या निकालना चाहते हैं? :/ –

+0

शब्दकोश, i.e. {'name': 'pluto', 'age': '7'} –

उत्तर

18

सूची समझ इस के लिए आदर्श है:

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

यह 'अगर' नहीं 'कहां' है। संपादित करें: मुझे लगता है कि आपने इसे ठीक किया है। यह उल्लेखनीय है कि यह अभी भी एक सूची है, क्योंकि उस मूल्य के साथ कई परिणामों की संभावना है - यदि आप सुनिश्चित हैं कि केवल एक ही है और केवल एक चाहता है, तो उस नई सूची में स्थिति 0 में तत्व का उपयोग करें। –

+0

बढ़िया! आपने मेरी समस्या हल की, धन्यवाद! –

+0

@ लैटवेयरवेयर हाँ, मैंने इसे जितनी जल्दी देखा मैंने इसे संपादित किया। आप तुरंत नोटिस कर रहे थे :) और हाँ, यह एक सूची तैयार करेगा। [0] का उपयोग करना खतरनाक है हालांकि परिणाम एक खाली सूची होगी। परिणामस्वरूप आप x x = x [0] जैसे x else {}' का उपयोग कर सकते हैं। या यदि 'नाम' अद्वितीय है तो '[x] = [d के लिए डी डी ['नाम'] == 'प्लूटो'] या [{}]' – rplnt

1
[d for d in a if d['name'] == 'pluto'] 
1
>>> [d['age'] for d in a if d['name']=='pluto'] 
['7'] 
+0

को देखते हुए, जिसके परिणामस्वरूप वे नहीं था ' टी निर्दिष्ट नहीं है, कोई यह मान लेगा कि वे पूरे नियम को निकालना चाहते हैं, लेकिन अगर वे विशेष रूप से कुछ चाहते हैं, तो यह एक अच्छा समाधान है। –

1

एक सूची समझ जो सही dict बाहर उठाता उपयोग डिक्ट्स की सूची में।

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

या, यदि आप सुनिश्चित नहीं हैं कि अगर a में dicts के सभी एक 'नाम' कुंजी है,

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

ध्यान दें कि इन दोनों को एक सूची लौट आते हैं। क्या आप जानते हैं केवल एक मिलान प्रविष्टि है कि वहाँ हैं, तो आप समाप्त करने के लिए [0] जोड़ सकते हैं वास्तविक dict वापस जाने के लिए:

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

अलावा सूची समझ से है कि अन्य प्रतिक्रियाओं आप को दे, तो आप भी एक साथ यह कर सकते हैं फ़िल्टर और एक लैम्ब्डा:

filter(lambda x: x.get('name') == 'pluto',a) 
संबंधित मुद्दे