दूसरे पैरामीटर के आधार पर सॉर्ट टुपल्स


92

मेरे पास टुपल्स की एक सूची है जो कुछ इस तरह दिखती है:

("Person 1",10)
("Person 2",8)
("Person 3",12)
("Person 4",20)

मैं जो उत्पादन करना चाहता हूं, वह सूची है क्रम में क्रम में क्रमबद्ध, टुपल के दूसरे मूल्य से। तो L [0] ("Person 2", 8)छंटाई के बाद होना चाहिए ।

मैं यह कैसे कर सकता हूँ? पाइथन 3.2.2 का उपयोग करना यदि वह मदद करता है।


जवाबों:


186

आप करने के लिए keyपैरामीटर का उपयोग कर सकते हैं list.sort():

my_list.sort(key=lambda x: x[1])

या, थोड़ा तेज,

my_list.sort(key=operator.itemgetter(1))

(किसी भी मॉड्यूल के साथ के रूप में, आपको import operatorइसका उपयोग करने में सक्षम होने की आवश्यकता होगी ।)


3
मैंने L.sort(key=operator.itemgetter(1))अपने कोड में उपयोग करने की कोशिश की है , लेकिन मुझे एक NameError मिलता है, जो 'ऑपरेटर' परिभाषित नहीं है। क्या मुझे कुछ विशेष आयात करने की आवश्यकता है?
user974703

3
थोड़ी खोज की, import operatorफ़ंक्शन का उपयोग करने के लिए उपयोग करने की आवश्यकता है । यदि आप इसे अपने उत्तर में जोड़ते हैं तो मैं इसे स्वीकार करूंगा।
user974703

Timeit.timeit (डिफ़ॉल्ट विकल्प) के साथ परीक्षण करना इन दोनों दृष्टिकोणों के बीच बहुत बड़ा अंतर नहीं है: ऑपरेटर ।itemgetter = 1.05ambs, lambda = 1.25µs प्रति पुनरावृत्ति
नोएल इवांस

My_list.sort (कुंजी = संचालक। विजेट (1)) समाधान के लिए धन्यवाद !! :)
aman_novice

1
यदि आप
लैम्बडा

12

और अगर आप python 3.X का उपयोग कर रहे हैं, तो आप mylistsorted पर फ़ंक्शन को लागू कर सकते हैं यह केवल उस उत्तर का एक जोड़ है जो @Sven Marnach ने ऊपर दिया है।

# using *sort method*
mylist.sort(lambda x: x[1]) 

# using *sorted function*
sorted(mylist, key = lambda x: x[1]) 

यह सिर्फ बिल्ट-इन है कि एक नई सूची देता है। आपका उत्तर यहां पहले से मौजूद लोगों के लिए कुछ भी योगदान नहीं करता है, क्योंकि यह स्पष्ट है कि यदि आप एक नई सूची चाहते थे तो आप sortedइसके बजाय उपयोग करेंगे list.sort
miradulo

2
@SamuelNde मैंने यहाँ नीचे स्क्रॉल किया क्योंकि मुझे यकीन नहीं था कि अगर अभिव्यक्ति ने क्रमबद्ध तरीके से काम किया तो इससे मुझे मदद मिली।
रेड राइडिंग हूड

हाँ सहमत हुए, इससे मुझे भी मदद मिली
स्टैकग सिप

-1
    def findMaxSales(listoftuples):
        newlist = []
        tuple = ()
        for item in listoftuples:
             movie = item[0]
             value = (item[1])
             tuple = value, movie

             newlist += [tuple]
             newlist.sort()
             highest = newlist[-1]
             result = highest[1]
       return result

             movieList = [("Finding Dory", 486), ("Captain America: Civil                      

             War", 408), ("Deadpool", 363), ("Zootopia", 341), ("Rogue One", 529), ("The  Secret Life of Pets", 368), ("Batman v Superman", 330), ("Sing", 268), ("Suicide Squad", 325), ("The Jungle Book", 364)]
             print(findMaxSales(movieList))

आउटपुट -> दुष्ट एक


विचारों की एक जोड़ी: यह वास्तव में सवाल का जवाब नहीं देता है (कैसे टुप में एक मूल्य द्वारा क्रमबद्ध सूची प्राप्त करने के लिए); आप सीधे अपने लूप में टपल को अनपैक कर सकते हैं (मूवी के लिए, सूची के मान में:); आपने 'टपल' प्रकार को ओवरराइड किया है; और यह वास्तव में किया जा सकता है एक एकल सूची समझ है: (मूवी के लिए रिटर्न (सॉर्ट किया गया, मान), सूची में मूल्य)) - [1] [1]]
RFox

मैं सराहना करता हूं कि आप क्या कर रहे हैं, लेकिन मैं तर्क दूंगा कि इसमें लालित्य की कमी है और इसमें सुधार किया जा सकता है। आम तौर पर इस तरह से एक टपल में तत्वों के क्रम को बदलने के लिए खराब अभ्यास माना जाएगा। मुझे लगता है कि सूची की समझ और अनकैपिंग tupples के बारे में अभी भी बिंदु खड़े होंगे। और मैं स्वीकृत उत्तर पर इस पद्धति का उपयोग करके किसी को भी हतोत्साहित करूंगा।
19

मैं असमर्थ हूं और काम करने के लिए आपके द्वारा पोस्ट किया गया कोड प्राप्त नहीं कर सकता, सबसे अधिक संभावना है कि उपयोगकर्ता त्रुटि
डेरेल व्हाइट

लेकिन इसे थोड़ा बदल दिया और कोई शक नहीं कि आपका जवाब 200x बेहतर है।
डेरेल व्हाइट

def findMaxSales (listoftuples): newlist = फिल्मों के लिए सॉर्ट ((मान, मूवी), listoftuples में मान) newlist [-1] [1] फिल्म सूची = ("फाइंडिंग डॉरी", 486, ("कैप्टन अमेरिका: सिविल वार") ", 408), (" डेडपूल ", 363), (" ज़ूटोपिया ", 341), (" दुष्ट वन ", 529), (" द सीक्रेट लाइफ ऑफ़ पेट्स ", 368), (" बैटमैन वी सुपरमैन, 330 " ), ("सिंग", 268), ("सुसाइड स्क्वैड", 325), ("द जंगल बुक", 364)] प्रिंट (findMaxSales (movieList))
डेरेल व्हाइट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.