2011-09-01 15 views
61

की सूची से मूल्य की सूची प्राप्त करने मैं एक इस तरह dict की सूची है:अजगर dict

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

मैं ['apple', 'banana', 'cars']

चाहते क्या सबसे अच्छा तरीका यह करना है?

+0

1) आपने क्या प्रयास किया है? कृपया अपना कोड शामिल करें। 2) "सर्वश्रेष्ठ" इस संदर्भ में एक अर्थहीन शब्द है - सबसे अच्छा मतलब सबसे तेज़, कम से कम स्मृति या ओरेकल-लाइसेंसीकृत उत्पादों का अधिकतर उपयोग हो सकता है। हम नहीं जानते कि आपको "सर्वश्रेष्ठ" से क्या मतलब है। और हम उस कोड पर टिप्पणी नहीं कर सकते जिसे आपने पोस्ट नहीं किया था। –

+4

शायद वह सिर्फ यह पूछना चाहता था कि –

+1

श्री @ एसएलॉट पर ऐसा करने के लिए "पायथनिक" तरीका क्या है, ऐसे में बहुत सारे प्रश्न हैं जिनके पास कोड नहीं है, लेकिन उत्तर, अद्भुत उत्तर हैं, अगर आप नहीं चाहते हैं उत्तर देने के लिए नहीं है क्योंकि x या y, बस इस पोस्ट को अनदेखा करें और यह सब कुछ है। : वी कई साल पहले। –

उत्तर

129

हर dict मान लिया जाये कि एक value कुंजी है, तो आपको

[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') डी में एल के लिए]। यदि मान कुंजी के रूप में मौजूद नहीं है, तो यह केवल 'alt' वापस आ जाएगा। – abhinav

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

या [d.getkey ('value') में dict_list में डी के लिए] – rplnt

+0

@rplnt, नहीं। ':)' –

+0

@rpInt उम, 'गेटकी' जैसी कोई चीज़ नहीं है .. क्या आपका मतलब 'd.get ('value')' है? यह @ इसाबादावी की दूसरी सूची समझ के समान होगा, माइकल की नहीं। – agf

13

यहाँ (यह मानते हुए कि अपनी सूची l नाम है) लिख सकते हैं मानचित्र() और लैम्ब्डा फ़ंक्शंस का उपयोग करके इसे करने का एक और तरीका:

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

जहां एल सूची है। मैं इस तरह से "sexiest" देखता हूं, लेकिन मैं सूची समझ का उपयोग कर इसे करूँगा।

अद्यतन: मामले कि 'मान' एक महत्वपूर्ण उपयोग के रूप में अनुपलब्ध हो सकता है में:

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

अद्यतन: मैं भी lambdas का एक बड़ा प्रशंसक नहीं हूँ, मैं चीजों को नाम के लिए पसंद करते हैं ... इस

>>> 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

यदि आप पहले 'मानचित्र' का उपयोग करने जा रहे हैं, तो 'operator.itemgetter ('value')', 'lambda'' का उपयोग करें। – agf

+0

+1 'मैथ' और 'लैम्ब्डा' के साथ पाइथोनिक होने के लिए +1 – rickcnagy

संबंधित मुद्दे