اذهب إلى المحتوى
  • 0

ترتيب قيم قاموس بشكل تصاعدي أو تنازلي في بايثون

Moatasm Elshahry

السؤال

Recommended Posts

  • 0

اذا كنت تستخدم نسخة قديمة من بايثون، ربما عليك استخدام الكود التالي:

import operator
x = {0: 1, 2: 3, 4: 5, 2: 2, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(1))

وسيكون شكل الخرج كالتالي:

{0: 0, 0: 1, 2: 2, 2: 3, 4: 5}

وهنا قمنا بعمل ترتيب لل value بشكل تصاعدي.

للعلم ايضا يمكنك ترتيب ال keys بدلا من ال values اذا اردت بنفس الطريقة كالتالي:

import operator
x = {0: 1, 2: 3, 4: 5, 2: 2, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(0))

لاحظ ان الفرق الوحيد بين الطريقتين هو تبديل 1 ب 0، حيث تعبر 0 عن keys بينما 1 عن values.

اما اذا كنت تستخدم python 3.7 او احدث،تستطيع استخدام الكود التالي:

>>> x = {0: 1, 2: 3, 4: 5, 2: 2, 0: 0}
>>> {k: v for k, v in sorted(x.items(), key=lambda item: item[1])}
{0: 0, 0: 1, 2: 2, 2: 3, 4: 5}

او باستخدام dict كالتالي:

>>> dict(sorted(x.items(), key=lambda item: item[1]))
{0: 0, 0: 1, 2: 2, 2: 3, 4: 5}
تم التعديل في بواسطة Ahmed Sharshar
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

بشكل عام لا يمكن فرز القواميس، ولكن يمكنك إنشاء قائمة مرتبة منهم.. إضافةً لما قدمه أحمد يمكنك استخدام الدالة  sorted بالشكل التالي:

sorted(dic.items(), key=lambda z: z[1])

سيؤدي هذا إلى فرز القاموس حسب قيم كل إدخال داخل القاموس من الأصغر إلى الأكبر.
لفرزها بترتيب تنازلي فقط أضف rever1se = T1rue:

sorted(dic.items(), key=lambda z: z[1], reverse=True)

انظر للمثال التالي:

dic = {'one':1,'three':3,'five':5,'two':2,'four':4}
dic = sorted(dic.items(), key=lambda z: z[1])    
dic
# [('one', 1), ('two', 2), ('three', 3), ('four', 4), ('five', 5)]

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

>>> # قاموس عادي غير مرتب
>>> d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}

>>> # قاموس مرتب حسب المفاتيح
>>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])

>>> # قاموس مرتب حسب القيم
>>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])

>>> # قاموس مرتب حسب طول السلسلة النصية في المفاتيح
>>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0])))
OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])

تحافظ القواميس المرتّبة الجديدة على ترتيبها عند حذف العناصر منها، ولكن تُلحق المفاتيح الجديدة المضافة إلى نهاية القاموس مع المحافظة على ترتيب العناصر الباقية.
حل مشكلتك:

dic = {'one':1,'three':3,'five':5,'two':2,'four':4}
from collections import OrderedDict
OrderedDict(sorted(d.items(), key=lambda x: x[1]))
"""
OrderedDict([('one', 1), ('two', 2), ('three', 3), ('four', 4), ('five', 5)])
"""

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...