2011-01-21 19 views
5

हाय मैं शब्दकोशों की सूची है .. और मैं इसे केस संवेदीसूची केस संवेदी छँटाई operator.attrgetter का उपयोग कर

members = Person.objects.filter(person=person_id) 
members_list = list(members) 

members_list.sort(key = operator.attrgetter(sort_by), reverse = False) 

यहाँ सॉर्ट करने के लिए है sort_by चाहते नाम किसके द्वारा मैं क्रमबद्ध करना चाहते हैं विशेषता। अब मैं असंवेदनशील मामले के साथ कैसे क्रमबद्ध कर सकता हूं ??

कृपया मदद ..

उत्तर

4

और आप operator.attrgetter() उपयोग करने के लिए, तो आप इस जो विशेषता यह करने को हासिल करेगा का मूल्य धर्मान्तरित इस्तेमाल कर सकते हैं चाहते हैं: यह साइट देखें प्रकार के दौरान तुलना के लिए लोअरकेस वर्णों:

members_list.sort(key = lambda mbr: operator.attrgetter(sort_by)(mbr).lower(), 
        reverse = False) 

हालांकि निम्नलिखित की तरह कुछ आसान है और साथ ही पढ़ने के लिए और अधिक कुशल के रूप में:

get_key = operator.attrgetter(sort_by) 
members_list.sort(key = lambda mbr: get_key(mbr).lower(), reverse = False) 
+0

thanx सर इसके कामकाजी :) – Ahsan

+0

@ अहसान: आपका स्वागत है ... और निश्चित रूप से यह काम किया ;-) – martineau

6
members_list.sort(key = lambda member: getattr(member,sort_by).lower(), reverse = False) 
+0

+1 * इस * 'भेड़ का बच्चा के लिए एक वैध उपयोग है दा' (विडंबना यह है कि आप इसके लिए एक कार्यात्मक भाषा में लैम्ब्डा का उपयोग नहीं करेंगे, जहां आपके पास डॉट '(f.g) (x) = f (g (x)) जैसे टूल हैं।)। लेकिन आपको 'getattr (सदस्य, sort_by) 'की आवश्यकता है। – delnan

+0

sort_by मेरा वैरिएबल है जिसमें विशेषता का नाम है। – Ahsan

+0

@ अहसान, ठीक है, मैंने गलत समझा। मैंने अपना जवाब अपडेट कर लिया है। –

1

ऐसा लगता है इस सवाल का Django के बारे में है। आप इसके बजाय एक क्रमबद्ध क्वेरीसेट लौटने के बारे में सोचना चाह सकते हैं। इसका मतलब है कि आप सॉर्टिंग को डेटाबेस भी छोड़ सकते हैं और अपने आप से परेशान नहीं हो सकते हैं। यदि sort_by विशेषता आप छँटाई के लिए उपयोग करना चाहते हैं के नाम के साथ स्ट्रिंग वाली एक चर रहा है django

+0

आप सही हैं लेकिन यहां सदस्य_सूची में मेरे पास रिवर्स रिलेशनशिप के माध्यम से कुछ फोरिगन कुंजी मान भी हैं। मुझे इस सूची में उन लोगों की भी आवश्यकता है। इसलिए क्वेरी पर मैं order_by का उपयोग नहीं कर सकता। – Ahsan

+0

इस कारण से मैंने सूची को सॉर्ट करने के लिए उपर्युक्त विधि का उपयोग किया था। – Ahsan

+0

डीबी की बजाय पाइथन में सॉर्ट करना अक्सर सस्ता हो सकता है, खासकर गैर अनुक्रमित कॉलम के लिए। –

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