چگونه یک دیکشنری را بر اساس مقدار در پایتون مرتب کنیم

معرفی

دیکشنری در پایتون مجموعه ای از آیتم ها است که داده ها را به صورت جفت کلید-مقدار ذخیره می کند. در پایتون 3.7 و نسخه های بعدی، دیکشنری ها بر اساس ترتیب درج آیتم ها مرتب می شوند. در نسخه های قبلی، آنها نامرتب بودند.

در این مقاله، نگاهی خواهیم داشت به اینکه چگونه می‌توانیم یک فرهنگ لغت را بر اساس مقادیری که در آن وجود دارد مرتب کنیم.

مرتب سازی دیکشنری با استفاده از a برای حلقه

ما می توانیم یک فرهنگ لغت را با کمک 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() متد روی اشیاء دیکشنری مقدار کلید یک دیکشنری را برمی گرداند.

La 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 حلقه ها با این حال، ما می توانیم بیشتر ترکیب کنیم sorted() عملکرد با itemgetter() تابع برای یک راه حل مختصر تر برای مرتب سازی فرهنگ لغت بر اساس مقادیر.

مرتب سازی دیکشنری با استفاده از اپراتور ماژول و itemgetter()

La 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() روش. این تابع جفت های کلید-مقدار یک فرهنگ لغت را به صورت لیستی از تاپل ها برمی گرداند. می توانیم لیست تاپل ها را با استفاده از عبارت مرتب کنیم 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(). اگر می‌خواهید درباره لامبدا بیشتر بدانید، می‌توانید در راهنمای ما درباره آن‌ها بخوانید توابع لامبدا در پایتون.

راهنمای عملی و عملی ما برای یادگیری Git را با بهترین روش ها، استانداردهای پذیرفته شده در صنعت و برگه تقلب شامل بررسی کنید. دستورات Google Git را متوقف کنید و در واقع یاد گرفتن آی تی!

بیایید یک فرهنگ لغت را با استفاده از یک تابع لامبدا در مقادیر مرتب کنیم 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)  

نتیجه

این آموزش نشان داد که چگونه یک فرهنگ لغت را می توان بر اساس مقادیر آن مرتب کرد. ما ابتدا یک فرهنگ لغت را با استفاده از دو حلقه for مرتب کردیم. سپس مرتب سازی خود را با استفاده از آن بهبود دادیم sorted() عملکرد. ما همچنین دیده ایم itemgetter() تابع از operator ماژول می تواند راه حل ما را مختصرتر کند.

در نهایت، ما راه حل خود را برای کار بر روی نسخه های پایتون پایین تر از 3.7 تطبیق دادیم.

تغییرات از sorted() تابع محبوب ترین و قابل اعتمادترین برای مرتب کردن فرهنگ لغت بر اساس مقادیر است.

تمبر زمان:

بیشتر از Stackabuse