وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

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

0 297
زمان لازم برای مطالعه: 4 دقیقه


معرفی

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

پیشنهاد می‌کنیم بخوانید:  راهنمای تفریق ماتریس NumPy

را 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()

را 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 آرگومان هر تابعی را می پذیرد، ما می توانیم از توابع لامبدا برای برگرداندن مقادیر فرهنگ لغت استفاده کنیم تا بتوان آنها را مرتب کرد. بیایید ببینیم چگونه.

پیشنهاد می‌کنیم بخوانید:  چگونه از Git Stash برای مدیریت موثر کد خود استفاده کنید

مرتب سازی دیکشنری با استفاده از تابع لامبدا

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

نتیجه

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

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

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

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-03 14:34:05

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید