مرتب سازی دیکشنری‌های پایتون بر اساس مقدار

امیرحسین بیگدلو 5 ماه قبل

 

 #  معرفی

دیکشنری ها ساختارهای داده ای نامرتب هستند. آنها از ساختار mapping برای ذخیره داده ها استفاده می کنند. دیکشنری ها key-value را ترسیم می کنند و جفت هایی ایجاد می کنند که داده های مرتبط را نگه می دارند.

 

با استفاده از متد sorted() پایتون می توانید محتویات یک دیکشنری را بر اساس مقدار(value) مرتب کنید. به عنوان مثال، برای رتبه بندی محبوبیت آیتم ها در منوی قهوه، می توانید از متد () sorted پایتون استفاده کنید. در این آموزش نحوه کار متد sorted() و نحوه استفاده از آن برای مرتب کردن محتوای دیکشنری بحث خواهد شد.

 

ویدیو مرتبط: ویدیو آموزش dictionary در پایتون

 

 #  یادآوری متد sorted پایتون

تابع sorted() داخلی پایتون می‌تواند برای مرتب‌سازی اشیاء تکرارپذیر مانند لیست‌ها، تاپل‌ها و دیکشنری‌ها استفاده شود. تابع sorted() آیتم های شی تکرار شونده مشخص شده را مرتب می کند و یک شی جدید با مقادیر مرتب شده جدید ایجاد می کند.

 

در اینجا نحو برای متد sorted() آمده است:

sorted(object, key, reverse)

 

این متد دارای سه پارامتر است:

  • object: شیء تکرار شونده ای که می خواهید مرتب کنید (الزامی)
  • key: تابعی که به شما امکان می دهد عملیات مرتب سازی سفارشی را انجام دهید (اختیاری)
  • reverse: مشخص می کند که آیا شی باید به ترتیب نزولی مرتب شود (اختیاری)

 

همانطور که می بینید، object تنها پارامتر مورد نیاز است. اگر تصمیم دارید از key اختیاری و پارامتر reverse استفاده نکنید، پایتون به طور خودکار object را به ترتیب صعودی مرتب می کند.

 

بیایید یک مثال سریع را مرور کنیم تا نحوه عملکرد متد sorted() را توضیح دهیم.

 

فرض کنید که ما در حال راه اندازی یک کافی شاپ هستیم و می خواهیم فهرستی از مشتریان کافی کلاب (وفاداری) خود را بر اساس حروف الفبا بازیابی کنیم. ما قبلاً لیستی از مشتریان داریم، اما بر اساس تاریخ ثبت نام سفارش داده می شود. ما می توانیم از کد زیر برای مرتب سازی لیست خود استفاده کنیم:

customers = ['Kaley Fernandez', 'Darius Rowland', 'Isaac Borthwick',  'Alexandria Kidd']

sorted_customers = sorted(customers)

print(sorted_customers)

# OUTPUT
['Alexandria Kidd', 'Darius Rowland', 'Isaac Borthwick', 'Kaley Fernandez']

 

در خط اول کد خود، لیستی را ایجاد می کنیم که نام مشتریان ما را ذخیره می کند. این لیست نام دارد: customers. سپس، از متد sorted() برای مرتب کردن لیست اسامی مشتریان به ترتیب صعودی استفاده می کنیم. این لیست جدید نامیده می شود: sorted_customers. در نهایت، لیست تازه مرتب شده را با استفاده از تابع print() در کنسول چاپ می کنیم.

 

ویدیو مرتبط: ویدیو آموزش متدهای sort و sorted در پایتون

 

 #  مرتب سازی دیکشنری براساس مقدار(value)

فرض کنید یک دیکشنری دارید و می خواهید آن را بر اساس جفت های کلید-مقدار مرتب کنید. شما می توانید این کار را با استفاده از دو تابع با هم انجام دهید: items() و sorted().

 

تابع ()item به شما امکان می دهد آیتم ها را در یک دیکشنری بازیابی کنید. می‌توانیم از این تابع در ترکیب با تابع sorted() و یک پارامتر key سفارشی برای مرتب‌سازی دیکشنری بر اساس مقدار استفاده کنیم. دو مثال زیر را در نظر بگیرید.

 

مقاله پیشنهادی: بررسی خالی بودن لیست در پایتون

 

 +  مثال اول: مرتب سازی براساس ترتیب نزولی

برگردیم به کافی شاپ. فرض کنید ما یک دیکشنری داریم که موارد موجود در منوی قهوه ما را ذخیره می کند و همچنین تعداد سفارش های هر کدام را در ماه گذشته ذخیره می کند. می‌خواهیم ببینیم محبوب‌ترین قهوه در ماه گذشته چه بود، بنابراین تصمیم گرفتیم دیکشنری را به ترتیب مقادیر نزولی مرتب کنیم.

 

در اینجا برنامه ای وجود دارد که می توانیم از آن برای مرتب کردن محتوای دیکشنری بر اساس مقدار استفاده کنیم:

orders = {
	'cappuccino': 54,
	'latte': 56,
	'espresso': 72,
	'americano': 48,
	'cortado': 41
}

sort_orders = sorted(orders.items(), key=lambda x: x[1], reverse=True)

for i in sort_orders:
	print(i[0], i[1])

 

کد ما موارد زیر را برمی گرداند:

espresso 72
latte 56
cappuccino 54
americano 48
cortado 41

 

چیزهای زیادی در کد ما در حال انجام است، پس بیایید آن را تجزیه کنیم.

 

در ابتدای کد خود، دیکشنری به نام orders تعریف می کنیم که نام قهوه ها را به عنوان کلید و تعداد فروخته شده را به عنوان مقادیر ذخیره می کند.

 

سپس از متد sorted() برای مرتب‌سازی دیکشنری بر اساس مقدار استفاده می‌کنیم. در اینجا نحوه استفاده از متد sorted() توضیح داده شده است:

Parameter Text Description
object orders.items()  به همه مقادیر موجود در دیکشنری "orders" ما اشاره دارد. اگر بخواهیم فقط از "orders" استفاده کنیم، باید به موقعیت ایندکس آیتم اشاره کنیم تا مقدار فردی آن را بدست آوریم. در حالی که اگر از orders.items() استفاده کنیم، یک لیست تکرارپذیر با آیتم های یک لیست ایجاد می شود.
key key=lambda x: x[1] مکانیزم مرتب‌سازی که به ما امکان می‌دهد دیکشنری خود را بر اساس مقدار مرتب کنیم. این نمونه ای از تابع Lambda است که تابعی بدون نام است.
reverse reverse=True بیان می کند که ما می خواهیم داده های ما به ترتیب نزولی مرتب شوند.

 

در نهایت، ما یک حلقه for ایجاد می کنیم که از طریق هر آیتم ایجاد شده در متد sort_order ما حلقه می زند و نام کلید و مقدار آن را چاپ می کند، به ترتیبی که ما در تابع sort_order مشخص کرده ایم.

 

ویدیو مرتبط: ویدیو آموزش لامبدا(lambda) در پایتون

 

 +  مثال دوم: مرتب سازی براساس ترتیب صعودی

به همین ترتیب، اگر بخواهیم کم‌مصرف‌ترین نوشیدنی فروخته شده در کافی شاپ خود را پیدا کنیم، می‌توانیم از همان کد بالا استفاده کنیم، اما بدون پارامتر reverse=True. در اینجا یک نمونه از کد برای این است:

orders = {
	'cappuccino': 54,
	'latte': 56,
	'espresso': 72,
	'americano': 48,
	'cortado': 41
}

sort_orders = sorted(orders.items(), key=lambda x: x[1])

for i in sort_orders:
	print(i[0], i[1])

 

وقتی کد خود را اجرا می کنیم، مقادیر زیر برمی گردند:

cortado 41
americano 48
cappuccino 54
latte 56
espresso 72

 

همانطور که می بینید، کد ما لیستی از اقلام را که به ترتیب صعودی مرتب شده اند، بر اساس تعداد هر کالای سفارش داده شده در ماه گذشته، برگرداند.

 

ویدیو مرتبط: ویدیو آموزش list comprehension در پایتون

 

 #  مرتب سازی با list comprehension

علاوه بر این، می‌توانیم از list comprehension برای مرتب‌سازی محتوای دیکشنری بر اساس مقدار استفاده کنیم. list comprehension یک تکنیک مختصر برای ایجاد لیست در پایتون است و اگر روش‌های مرتب‌سازی پیچیده‌تری ایجاد می‌کنید، می‌تواند فضا را ذخیره کند.

 

در این مثال، کدی که برای مرتب کردن سفارشات قهوه به ترتیب صعودی بر اساس تعداد هر قهوه ای که با استفاده از list comprehension سفارش داده شده است، استفاده می کنیم:

orders = {
	'cappuccino': 54,
	'latte': 56,
	'espresso': 72,
	'americano': 48,
	'cortado': 41
}

[print(key, value) for (key, value) in sorted(orders.items(), key=lambda x: x[1])]

 

وقتی کد خود را اجرا می کنیم، پاسخ زیر برگردانده می شود:

cortado 41
americano 48
cappuccino 54
latte 56
espresso 72

 

نتیجه کد ما مانند مثال بالا بود که در آن محتویات لیست سفارشات را به ترتیب صعودی مرتب کردیم. اما به جای تعریف متغیر sort_orders و ایجاد یک حلقه جداگانه برای تکرار در لیست مرتب شده، با استفاده از تکنیک list comprehension لیستی ایجاد کردیم.

 

list comprehension که در بالا ایجاد کردیم، هر یک از آیتم های لیست را به ترتیب صعودی مرتب می کند، سپس کلید و مقدار هر مورد دیکشنری را در کنسول چاپ می کند.

 

 

 #  نتیجه گیری

هنگامی که با دیکشنری ها در پایتون کار می کنید، مرتب کردن دیکشنری بر اساس مقدار یک عملیات رایج است. متد sorted() به شما امکان می دهد مجموعه ای از داده ها را بر اساس نیاز خود مرتب کنید. این آموزش نحوه استفاده از متد sorted() برای مرتب‌سازی دیکشنری بر اساس مقدار در پایتون، از جمله نحوه استفاده از پارامترهای key و reverse را مورد بحث قرار می‌دهد.

مطالب مشابه



مونگارد