দ্বিতীয় প্যারামিটারের ভিত্তিতে টিপলগুলি বাছাই করুন


93

আমার কাছে টিপলগুলির একটি তালিকা রয়েছে যা দেখতে দেখতে এমন কিছু দেখাচ্ছে:

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

আমি যেটি উত্পাদন করতে চাই, তা হল টিপলের দ্বিতীয় মান অনুসারে আরোহণের ক্রম অনুসারে তালিকাটি সাজানো। সুতরাং এল [0] ("Person 2", 8)বাছাইয়ের পরে হওয়া উচিত ।

কিভাবে আমি এটি করতে পারব? পাইথন ৩.২.২ ব্যবহার করা যদি এটি সহায়তা করে।


উত্তর:


187

আপনি keyপ্যারামিটারটি ব্যবহার করতে পারেন list.sort():

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

বা, কিছুটা দ্রুত,

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

(যে কোনও মডিউলের মতোই, আপনাকে import operatorএটি ব্যবহার করতে সক্ষম হতে হবে))


4
আমি L.sort(key=operator.itemgetter(1))আমার কোডটি ব্যবহার করার চেষ্টা করেছি , তবে আমি একটি নেমরর পেয়েছি, এটি 'অপারেটর' সংজ্ঞায়িত হয়নি। আমার কি বিশেষ কিছু আমদানি করা দরকার?
ব্যবহারকারী 974703

4
কিছুটা অনুসন্ধান করেছেন, import operatorফাংশনটি ব্যবহার করতে প্রয়োজন । আপনি যদি আপনার উত্তরে এটি যুক্ত করেন তবে আমি এটি স্বীকৃত চিহ্নিত করব।
ব্যবহারকারী 974703

টাইমাইট.টাইমাইট (ডিফল্ট বিকল্পগুলি) দিয়ে পরীক্ষা করা এই দুটি পদ্ধতির মধ্যে বিশাল পার্থক্য নেই: অপারেটর.ইটিমেজেটার = 1.05µs, ল্যাম্বদা = 1.25µ প্রতি পুনরাবৃত্তি
নোয়েল ইভান্স

মাই_লিস্ট.সর্ট (কী = অপারেটর.ইটিমেজেটার (1)) সমাধানের জন্য ধন্যবাদ !! :)
aman_novice

4
: যদি আপনি ল্যামডা শব্দ নতুন হন stackoverflow.com/questions/13669252/what-is-key-lambda
EchoLynx

12

এবং যদি আপনি পাইথন 3. এক্স ব্যবহার করেন তবে আপনি মাইলিস্টে sortedফাংশনটি প্রয়োগ করতে পারেন @ সোভেন মারনাচ উপরে যে উত্তর দিয়েছেন তা এটি কেবলমাত্র একটি সংযোজন।

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

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

এটি কেবল অন্তর্নির্মিত যা একটি নতুন তালিকা দেয়। আপনার উত্তরটি এখানে ইতিমধ্যে কিছুতে অবদান রাখে না, কারণ এটি স্পষ্ট যে আপনি যদি একটি নতুন তালিকা চান তবে আপনি তার sortedপরিবর্তে ব্যবহার করতে পারেন list.sort
মিরাদুলো

4
@ সামুয়েলএনডি আমি এখানে স্ক্রোল করেছিলাম কারণ আমি নিশ্চিত ছিলাম না যে প্রকাশটি সাজানোর জন্য একই কাজ করেছে যাতে এটি আমাকে সহায়তা করে।
রেড রাইডিং হুড

হ্যাঁ রাজি হয়ে গেছে, এটি আমাকেও সহায়তা করেছে
স্ট্যাকজি

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

আউটপুট -> এক দুর্গন্ধ


কয়েকটা চিন্তাভাবনা: এটি আসলে প্রশ্নের উত্তর দেয় না (কীভাবে তালিকার মান অনুসারে বাছাই করা একটি তালিকা পাবেন); আপনি সরাসরি আপনার লুপে টিপলটি আনপ্যাক করতে পারেন (সিনেমার জন্য, তালিকা-তালিকার মান:); আপনি 'tuple' টাইপটিকে ওভাররাইড করেছেন; এবং এটি আসলে একক তালিকা বোঝার জন্য করা যেতে পারে: (মুভিটির জন্য সাজানো ((মান, চলচ্চিত্র), তালিকাগুলিতে মূল্য)) [- 1] [1])
আরএফক্স

আপনি যা যাচ্ছেন তার জন্য আমি প্রশংসা করি তবে আমি যুক্তি দিয়ে বলব যে এটিতে কমনীয়তা নেই এবং এটি আরও উন্নত হতে পারে। সাধারণত এটির মতো একটি টিপিতে উপাদানগুলির ক্রমকে রূপান্তরিত করা খারাপ অভ্যাস হিসাবে বিবেচিত হবে। আমি মনে করি তালিকা বোধগম্যতা এবং আনপ্যাকিং টিপলসগুলি সম্পর্কে পয়েন্টগুলি এখনও দাঁড়িয়ে থাকবে। এবং আমি গ্রহণযোগ্য উত্তরের উপর এই পদ্ধতি ব্যবহার করে যে কাউকে নিরুৎসাহিত করব।
আরএফক্স

আমি অক্ষম এবং আপনি কাজ করতে পোস্ট করা কোডটি পেতে পারিনি, সম্ভবত কোনও ব্যবহারকারীর ত্রুটি
ড্যারেল হোয়াইট

তবে এটি কিছুটা পরিবর্তন করেছে এবং সন্দেহ নেই যে আপনার উত্তরটি 200x আরও ভাল।
ড্যারেল হোয়াইট

Def findMaSales (listoftuples): চলচ্চিত্রের জন্য নতুন তালিকা = বাছাই করা ((মান, চলচ্চিত্র)) তালিকাতে নতুন তালিকা ফিরে আসে [-1] [1] মুভিলিস্ট = [("ফাইন্ডিং ডরি", 486), ("ক্যাপ্টেন আমেরিকা: গৃহযুদ্ধ) ", 408), (" ডেডপুল ", 363), (" জুতোপিয়া ", 341), (" রোগ ওয়ান ", 529), (" পোষা প্রাণীর সিক্রেট লাইফ ", 368), (" ব্যাটম্যান ভি সুপারম্যান ", 330 ), ("সিং", 268), ("সুইসাইড স্কোয়াড", 325), ("দ্য জঙ্গল বুক", 364)] মুদ্রণ (ফাইন্ডম্যাক্স সেলস (মুভিলিস্ট))
ড্যারেল হোয়াইট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.