خشتک اور فلو

چطور میتونم با پایتون یه دیکشنری رو بر اساس مقدار (value) مرتب کنم؟

پرسیده شده: بازدید: ۳۴۵ بار علاقه‌مندی‌ها: ۱۲ نفر
۲۵

سلام به همه خشتک‌دوزان عزیز!

من یه دیکشنری تو پایتون دارم، مثلا به این شکل:

my_dict = {'apple': 50, 'banana': 10, 'cherry': 75, 'date': 30}

می‌خوام این دیکشنری رو بر اساس مقادیر (values) به صورت صعودی مرتب کنم. یعنی خروجی چیزی شبیه به این بشه (حالا یا لیست تاپل‌ها یا یه دیکشنری جدید مرتب شده اگه ممکنه):

# Expected output (e.g., list of tuples)
# [('banana', 10), ('date', 30), ('apple', 50), ('cherry', 75)]

بهترین و پایتونیک‌ترین راه برای این کار چیه؟ آیا میشه بدون استفاده از کتابخونه خاصی این کار رو انجام داد؟ ممنون میشم اگه با یه تیکه کد کوچیک راهنماییم کنید. خشتکتون آباد!

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

۲ پاسخ (وصله پیشنهادی)

۱۸

درود بر شما! راه حل پایتونیک و ساده برای این کار استفاده از تابع `sorted()` به همراه یک تابع `lambda` برای مشخص کردن کلید مرتب‌سازی هست.

اینطوری می‌تونید انجامش بدید:

my_dict = {'apple': 50, 'banana': 10, 'cherry': 75, 'date': 30}

# Sort by value
sorted_items = sorted(my_dict.items(), key=lambda item: item[1])

# sorted_items will be: [('banana', 10), ('date', 30), ('apple', 50), ('cherry', 75)]
print(sorted_items)

# If you want to sort in descending order:
# sorted_items_desc = sorted(my_dict.items(), key=lambda item: item[1], reverse=True)
# print(sorted_items_desc)

توضیح کد:

  • my_dict.items(): یک view object برمی‌گردونه که آیتم‌های دیکشنری رو به صورت زوج‌های (کلید, مقدار) نمایش میده.
  • sorted(...): یک لیست مرتب شده جدید از آیتم‌های قابل پیمایش (iterable) برمی‌گردونه.
  • key=lambda item: item[1]: به تابع `sorted` میگه که برای مرتب‌سازی، از عنصر دوم هر تاپل (یعنی مقدار یا value) استفاده کنه.

این روش خیلی تمیز و خوانا هست و نیازی به کتابخونه اضافی هم نداره. امیدوارم این وصله به خشتکتون بخوره!

۵

یه راه دیگه هم استفاده از `collections.OrderedDict` هست اگه بخواید نتیجه همچنان یک دیکشنری باشه و ترتیبش هم حفظ بشه (البته از پایتون ۳.۷ به بعد دیکشنری‌های استاندارد هم ترتیب ورود رو حفظ می‌کنن، ولی `OrderedDict` صراحتاً برای این کاره).

from collections import OrderedDict

my_dict = {'apple': 50, 'banana': 10, 'cherry': 75, 'date': 30}

# Create an OrderedDict sorted by value
sorted_ordered_dict = OrderedDict(sorted(my_dict.items(), key=lambda item: item[1]))

# sorted_ordered_dict will be: OrderedDict([('banana', 10), ('date', 30), ('apple', 50), ('cherry', 75)])
print(sorted_ordered_dict)

for k, v in sorted_ordered_dict.items():
    print(k, v)

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

وصله خود را بدوزید (پاسخ شما)