Python Programming

فرز قواميس بايثون بكفاءة حسب القيمة

Spread the love

تُعَدّ قواميس بايثون، رغم قوتها، غير مُرتّبة بطبيعتها. وهذا يعني أنه لا يمكنك فرز قاموس مباشرةً؛ ومع ذلك، يمكنك بسهولة الحصول على تمثيل مُرتّب بناءً على قيمه. تستعرض هذه المقالة عدة طرق فعّالة لتحقيق ذلك، لتُناسب الاحتياجات المختلفة وإصدارات بايثون.

جدول المحتويات

استخراج القيم المُرتّبة

إذا كنت تحتاج فقط إلى القيم المُرتّبة نفسها، دون الحفاظ على علاقات المفتاح والقيمة، فهذا هو النهج الأبسط والأكثر كفاءة:


my_dict = {'apple': 5, 'banana': 2, 'cherry': 8, 'date': 1}

sorted_values = sorted(my_dict.values())
print(sorted_values)  # الإخراج: [1, 2, 5, 8]

تعمل الدالة المُدمجة sorted() مباشرةً على قيم القاموس، مُرجعَة قائمة مُرتّبة جديدة. هذه الطريقة مثالية عندما لا تحتاج إلى الحفاظ على أزواج المفتاح والقيمة الأصلية.

الفرز باستخدام operator.itemgetter

للحصول على المزيد من التحكم، خاصة عند الفرز بترتيب تنازلي، يوفر operator.itemgetter حلاً نظيفًا وفعالًا. فهو يُنشئ كائنًا قابلًا للدعوة يستخرج القيمة من كل زوج مفتاح-قيمة:


import operator

my_dict = {'apple': 5, 'banana': 2, 'cherry': 8, 'date': 1}

sorted_items = sorted(my_dict.items(), key=operator.itemgetter(1))
print(sorted_items)  # الإخراج: [('date', 1), ('banana', 2), ('apple', 5), ('cherry', 8)]

sorted_items_desc = sorted(my_dict.items(), key=operator.itemgetter(1), reverse=True)
print(sorted_items_desc)  # الإخراج: [('cherry', 8), ('apple', 5), ('banana', 2), ('date', 1)]

يقوم هذا بفرز عناصر القاموس (أزواج المفتاح والقيمة) بناءً على القيمة (العُنصُر الثاني، الفهرس 1، من كل مُتغيّر). يُمكّن reverse=True الفرز بالترتيب التنازلي. والنتيجة هي قائمة من مُتغيرات (مفتاح، قيمة).

الفرز باستخدام دالة لامدا

تُقدّم دالة لامدا بديلاً مُوجزًا وسطرًا واحدًا لتعريف مفتاح الفرز:


my_dict = {'apple': 5, 'banana': 2, 'cherry': 8, 'date': 1}

sorted_items = sorted(my_dict.items(), key=lambda item: item[1])
print(sorted_items)  # الإخراج: [('date', 1), ('banana', 2), ('apple', 5), ('cherry', 8)]

sorted_items_desc = sorted(my_dict.items(), key=lambda item: item[1], reverse=True)
print(sorted_items_desc)  # الإخراج: [('cherry', 8), ('apple', 5), ('banana', 2), ('date', 1)]

يُحقق هذا نفس النتيجة التي يحققها operator.itemgetter، لكن دالة المفتاح مُعرّفة مباشرةً ضمن sorted()، مما يُقدّم حلاً أكثر إيجازًا للحالات الأبسط.

إنشاء قواميس مُرتّبة

إذا كنت تحتاج إلى قاموس يحافظ على الترتيب المُرتّب، فإن قواميس بايثون 3.7+ تحافظ بطبيعتها على ترتيب الإدراج. بالنسبة للإصدارات الأقدم أو حيث يكون الترتيب المُضمَن ضروريًا، يمكنك استخدام فهم القاموس:


my_dict = {'apple': 5, 'banana': 2, 'cherry': 8, 'date': 1}

sorted_dict = {k: v for k, v in sorted(my_dict.items(), key=lambda item: item[1])}
print(sorted_dict)  # الإخراج: {'date': 1, 'banana': 2, 'apple': 5, 'cherry': 8}

يقوم هذا بإنشاء قاموس جديد بكفاءة مع أزواج المفتاح والقيمة المُرتّبة وفقًا للقيم المُرتّبة.

قدّمت هذه المقالة تقنيات متنوعة لفرز قواميس بايثون حسب القيمة، مُقدّمةً حلولًا مناسبة لسياقات مختلفة وإصدارات بايثون. تذكّر باختيار الطريقة الأنسب لمتطلباتك المحددة وإصدار بايثون الذي تستخدمه.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *