পাইথনে মান অনুসারে একটি অভিধান কীভাবে সাজানো যায়

ভূমিকা

পাইথনে একটি অভিধান হল আইটেমগুলির একটি সংগ্রহ যা কী-মান জোড়া হিসাবে ডেটা সংরক্ষণ করে। পাইথন 3.7 এবং পরবর্তী সংস্করণগুলিতে, অভিধানগুলি আইটেম সন্নিবেশের ক্রম অনুসারে সাজানো হয়। পূর্ববর্তী সংস্করণে, এগুলি বিন্যাসহীন ছিল।

এই প্রবন্ধে, আমরা সেগুলোতে থাকা মানগুলির ভিত্তিতে একটি অভিধানকে কীভাবে সাজাতে পারি তা দেখব।

একটি ব্যবহার করে অভিধান সাজান উন্নত লুপ

আমরা a এর সাহায্যে অভিধান সাজাতে পারি for লুপ. প্রথমত, আমরা ব্যবহার করি sorted() অভিধানের মানগুলি অর্ডার করার ফাংশন। তারপরে আমরা সাজানো মানগুলি লুপ করি, প্রতিটি মানের জন্য কীগুলি খুঁজে বের করি। আমরা একটি নতুন অভিধানে সাজানো ক্রমে এই কী-মান জোড়া যোগ করি।

বিঃদ্রঃ: বাছাই করা আপনাকে অভিধানটি পুনরায় অর্ডার করার অনুমতি দেয় না। আমরা একটি সম্পূর্ণ নতুন, খালি অভিধানে অর্ডার করা জোড়া লিখছি।

dict1 = {1: 1, 2: 9, 3: 4}
sorted_values = sorted(dict1.values()) 
sorted_dict = {}

for i in sorted_values:
    for k in dict1.keys():
        if dict1[k] == i:
            sorted_dict[k] = dict1[k]

print(sorted_dict)

আপনি যদি পাইথন ইন্টারপ্রেটার দিয়ে এটি চালান তবে আপনি দেখতে পাবেন:

{1: 1, 3: 4, 2: 9}

এখন যেহেতু আমরা দেখেছি কিভাবে লুপ দিয়ে সাজাতে হয়, আসুন আরও একটি জনপ্রিয় বিকল্প দেখি যা ব্যবহার করে sorted() ফাংশন.

ব্যবহার করে অভিধান সাজান সাজানো() ক্রিয়া

আমরা আগে ব্যবহার করতাম sorted() একটি অ্যারের মান সাজানোর ফাংশন। একটি অভিধান বাছাই করার সময়, আমরা আরও একটি যুক্তি পাস করতে পারি sorted() এই মত ফাংশন: sorted(dict1, key=dict1.get).

এখানে, key বাছাই করার জন্য মান তুলনা করার আগে প্রতিটি উপাদান কল করা হয় যে একটি ফাংশন. দ্য get() অভিধান বস্তুর পদ্ধতি একটি অভিধানের কী এর মান প্রদান করে।

সার্জারির sorted(dict1, key=dict1.get) এক্সপ্রেশন কীগুলির তালিকা প্রদান করবে যার মানগুলি ক্রমানুসারে সাজানো হয়েছে। সেখান থেকে, আমরা একটি নতুন, সাজানো অভিধান তৈরি করতে পারি:

dict1 = {1: 1, 2: 9, 3: 4}
sorted_dict = {}
sorted_keys = sorted(dict1, key=dict1.get)  

for w in sorted_keys:
    sorted_dict[w] = dict1[w]

print(sorted_dict) 

উপরের sorted() ফাংশন ব্যবহার করার সময় আমাদের লিখতে থাকা কোডের পরিমাণ হ্রাস করেছে for loops যাইহোক, আমরা আরও একত্রিত করতে পারেন sorted() সঙ্গে ফাংশন itemgetter() মান অনুসারে অভিধান বাছাই করার জন্য আরও সংক্ষিপ্ত সমাধানের জন্য ফাংশন।

ব্যবহার করে অভিধান সাজান অপারেটর মডিউল এবং আইটেমজেটার()

সার্জারির operator মডিউল অন্তর্ভুক্ত itemgetter() ফাংশন এই ফাংশনটি একটি কলযোগ্য বস্তু প্রদান করে যা একটি বস্তু থেকে একটি আইটেম ফেরত দেয়।

উদাহরণস্বরূপ, এর ব্যবহার করা যাক itemgetter() একটি কলযোগ্য বস্তু তৈরি করতে যা একটি কী দিয়ে যেকোনো অভিধানের মান প্রদান করে 2:

import operator

dict1 = {1: 1, 2: 9}
get_item_with_key_2 = operator.itemgetter(2)

print(get_item_with_key_2(dict1))  

প্রতিটি অভিধানে অ্যাক্সেস রয়েছে items() পদ্ধতি এই ফাংশন টিপলের তালিকা হিসাবে অভিধানের কী-মান জোড়া প্রদান করে। আমরা ব্যবহার করে tuples তালিকা বাছাই করতে পারেন itemgetter() ফাংশন টিপলের দ্বিতীয় মান অর্থাৎ অভিধানে কীগুলির মান টানতে পারে।

একবার এটি সাজানো হয়ে গেলে, আমরা সেই মানগুলির উপর ভিত্তি করে একটি অভিধান তৈরি করতে পারি:

import operator

dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=operator.itemgetter(1))
print(sorted_tuples)  
sorted_dict = {k: v for k, v in sorted_tuples}

print(sorted_dict) 

অনেক কম প্রচেষ্টার সাথে, আমাদের কাছে মান অনুসারে সাজানো একটি অভিধান আছে!

যেমন key আর্গুমেন্ট যেকোনো ফাংশন গ্রহণ করে, আমরা অভিধানের মান ফেরাতে ল্যাম্বডা ফাংশন ব্যবহার করতে পারি যাতে সেগুলি সাজানো যায়। চলুন দেখা যাক কিভাবে.

ল্যাম্বডা ফাংশন ব্যবহার করে অভিধান সাজান

পাইথনে ল্যাম্বডা ফাংশনগুলি বেনামী, বা নামহীন, ফাংশন। আমরা আমদানি না করেই অভিধান আইটেমের মান পেতে ল্যাম্বডা ফাংশন ব্যবহার করতে পারি operator জন্য মডিউল itemgetter(). আপনি যদি ল্যাম্বডাস সম্পর্কে আরও জানতে চান, আপনি তাদের সম্পর্কে আমাদের গাইডে পড়তে পারেন পাইথনে ল্যাম্বডা ফাংশন.

সেরা-অভ্যাস, শিল্প-স্বীকৃত মান এবং অন্তর্ভুক্ত চিট শীট সহ গিট শেখার জন্য আমাদের হ্যান্ডস-অন, ব্যবহারিক গাইড দেখুন। গুগলিং গিট কমান্ড এবং আসলে বন্ধ করুন শেখা এটা!

এর মধ্যে একটি ল্যাম্বডা ফাংশন ব্যবহার করে মান অনুসারে একটি অভিধান বাছাই করা যাক key যুক্তি sorted():

dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=lambda item: item[1])
print(sorted_tuples)  
sorted_dict = {k: v for k, v in sorted_tuples}

print(sorted_dict)  

মনে রাখবেন যে পদ্ধতিগুলি আমরা এখন পর্যন্ত আলোচনা করেছি শুধুমাত্র পাইথন 3.7 এবং পরবর্তীতে কাজ করে। আসুন দেখি পাইথনের আগের সংস্করণগুলির জন্য আমরা কী করতে পারি।

সাজানো মান সহ একটি নতুন অভিধান ফেরত দেওয়া

মান অনুসারে একটি অভিধান বাছাই করার পরে, 3.7 এর আগে পাইথন সংস্করণে একটি সাজানো অভিধান রাখতে, আপনাকে ব্যবহার করতে হবে OrderedDict - এ উপলব্ধ collections মডিউল এই বস্তুগুলি এমন অভিধান যা সন্নিবেশের ক্রম বজায় রাখে।

এখানে সাজানো এবং ব্যবহার করার একটি উদাহরণ OrderedDict:

import operator
from collections import OrderedDict

dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=operator.itemgetter(1))
print(sorted_tuples)  

sorted_dict = OrderedDict()
for k, v in sorted_tuples:
    sorted_dict[k] = v

print(sorted_dict)  

উপসংহার

এই টিউটোরিয়ালটি দেখিয়েছে কিভাবে একটি অভিধানকে এর মানগুলির উপর ভিত্তি করে সাজানো যায়। আমরা প্রথমে লুপের জন্য দুটি ব্যবহার করে একটি অভিধান সাজিয়েছি। আমরা তারপর ব্যবহার করে আমাদের বাছাই উন্নত sorted() ফাংশন আমরাও দেখেছি itemgetter() থেকে ফাংশন operator মডিউল আমাদের সমাধান আরও সংক্ষিপ্ত করতে পারে।

অবশেষে, আমরা পাইথন সংস্করণ 3.7-এর চেয়ে কম কাজ করার জন্য আমাদের সমাধানকে মানিয়ে নিয়েছি।

এর বৈচিত্র sorted() মান অনুসারে অভিধান সাজানোর জন্য ফাংশন সবচেয়ে জনপ্রিয় এবং নির্ভরযোগ্য।

সময় স্ট্যাম্প:

থেকে আরো Stackabuse