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