2011-03-16 9 views
41

का मूल्य मैं बहुत तरह dicts की एक सूची है:Dicts की सूची में, खोजने के मिनट() एक आम Dict क्षेत्र

[{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}] 

मैं मिनट() और अधिकतम() की कीमतों लगाना चाहते हैं। अब, मैं इसे लैम्ब्डा अभिव्यक्ति (जैसा कि किसी अन्य SO लेख में पाया गया है) के साथ एक कुंजी का उपयोग करके आसानी से पर्याप्त रूप से सॉर्ट कर सकता हूं, इसलिए यदि कोई अन्य तरीका नहीं है तो मैं अटक नहीं गया हूं। हालांकि, मैंने जो देखा है उससे पाइथन में लगभग हमेशा एक सीधा तरीका है, इसलिए यह मेरे लिए थोड़ा और सीखने का अवसर है।

TIA,

हांक फे

उत्तर

30

कई विकल्प हैं।

seq = [x['the_key'] for x in dict_list] 
min(seq) 
max(seq) 

[संपादित करें]

आप केवल एक बार सूची के माध्यम से पुनरावृति करना चाहता था, तो आप इस कोशिश कर सकते (मूल्यों संभालने int रों के रूप में प्रतिनिधित्व किया जा सकता है):: यह एक सीधी-सपाट एक है

import sys 

lo,hi = sys.maxint,-sys.maxint-1 
for x in (item['the_key'] for item in dict_list): 
    lo,hi = min(x,lo),max(x,hi) 
+0

मैं इसे उत्तर के रूप में स्वीकार करता हूं क्योंकि यह न केवल उत्तर देता है, बल्कि यह मुझे दिखाता है कि कोई अमूर्त दृश्य हो सकता है। डारन, पायथन एक सुंदर भाषा है। धन्यवाद! –

+2

यदि आपको 'seq' की आवश्यकता नहीं है, और सूची बड़ी है, तो यह अक्षम हो सकती है क्योंकि संपूर्ण सूची के लिए स्मृति को अधिकतम खोजने के लिए आवंटित किया जाना चाहिए। –

6

एक जवाब एक जनरेटर अभिव्यक्ति के अंदर ब्याज के मूल्य के अपने dicts मानचित्रण किया जाएगा, और फिर बनाया-इन min और max को लागू करने।

myMax = max(d['price'] for d in myList) 
myMin = min(d['price'] for d in myList) 
+0

नाइटपिक: वे जनरेटर अभिव्यक्तियां हैं। सूची की समझ '[' और ']' से घिरा हुआ है, और वास्तव में एक पाइथन सूची को मध्यवर्ती चरण के रूप में उत्पन्न करती है। – dcrosta

+0

@ डीक्रॉस्टा, हाँ, धन्यवाद, आप बिल्कुल सही हैं। मैंने शब्द बदल दिया क्योंकि वह शर्मनाक था। – rlibby

24

मुझे लगता है कि जैसे सबसे सीधा (और सबसे pythonic) अभिव्यक्ति होगा कुछ:

min_price = min(item['price'] for item in items) 

इस सूची को क्रमबद्ध करने की भूमि के ऊपर से बचा जाता है - और, एक जनरेटर अभिव्यक्ति का उपयोग करके बजाय एक सूची समझ - वास्तव में किसी भी सूचियों को बनाने से बचाता है। कुशल, प्रत्यक्ष, पठनीय ... पायथनिक!

+0

मुझे हंसना है: मैं अपने पायदेव कंसोल पर वापस गया, और इस जवाब के साथ आया, इसलिए वापस जल्दी हो गया ताकि अन्य लोग अपना समय बर्बाद न करें - और पहले से ही 3 जवाब थे। बहुत बहुत धन्यवाद। –

102
lst = [{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}] 

maxPricedItem = max(lst, key=lambda x:x['price']) 
minPricedItem = min(lst, key=lambda x:x['price']) 

यह आपको बताता है ही नहीं, क्या अधिकतम मूल्य है, लेकिन यह भी जो आइटम सबसे महंगी है।

+2

आह, यह एक अच्छा स्पर्श है, पूरे आइटम को वापस कर रहा है। इस उदाहरण में जरूरी नहीं है, लेकिन भविष्य के लिए निश्चित रूप से एक रखरखाव है। –

+0

मुझे पूरी वस्तु की आवश्यकता है, इसलिए यह बहुत उपयोगी है, धन्यवाद – Eric

+0

यही वह है जिसे मैं ढूंढ रहा था। बहुत बढ़िया। धन्यवाद! – sv0101

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