0Pricing
Python Academy · درس

namedtuple وOrderedDict

تعرّف على مجموعات أخرى مفيدة

namedtuple وOrderedDict درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.

مجموعتان إضافيتان مفيدتان

تتضمن الوحدة collections كلًا من namedtuple لإنشاء tuples تشبه السجلات وسهلة القراءة، وOrderedDict للقواميس التي توفر أساليب إضافية للتعامل مع الترتيب.

استوردهما باستخدام from collections import namedtuple, OrderedDict.

from collections import namedtuple, OrderedDict
print(namedtuple)
print(OrderedDict)

تعريف namedtuple

تنشئ namedtuple(name, fields) فئة فرعية جديدة من tuple. تمرّر اسم النوع وقائمة بأسماء الحقول. والنتيجة فئة يمكنك إنشاء مثيلات منها.

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p)

الوصول باستخدام الاسم

الفائدة الأهم هي قراءة الحقول باستخدام أسمائها بدلًا من أرقام الفهارس الغامضة، مما يجعل الشيفرة أسهل بكثير في القراءة.

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p.x)
print(p.y)

تبقى tuple

إن namedtuple هي tuple حقيقية، لذلك تظل الفهرسة وفك الحزم والتكرار كلها متاحة.

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p[0])
x, y = p
print(x + y)

غير قابلة للتغيير لكنها قابلة للاستبدال

مثل جميع tuples، لا يمكن تغيير namedtuples. للحصول على نسخة معدّلة، استخدم ._replace()، إذ تعيد هذه الدالة مثيلًا جديدًا.

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
q = p._replace(y=10)
print(p)
print(q)

التحويل إلى قاموس

تحوّل ._asdict() كائن namedtuple إلى قاموس عادي يربط أسماء الحقول بالقيم.

from collections import namedtuple
Car = namedtuple('Car', ['make', 'year'])
c = Car('Toyota', 2026)
print(c._asdict())

القيم الافتراضية

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

from collections import namedtuple
User = namedtuple('User', ['name', 'role'], defaults=['guest'])
print(User('Alice'))
print(User('Bob', 'admin'))

فحص الحقول

تسرد الخاصية ._fields أسماء الحقول، وهي مفيدة للفحص الداخلي أو لبناء شيفرة عامة.

from collections import namedtuple
Color = namedtuple('Color', ['r', 'g', 'b'])
print(Color._fields)

أساسيات OrderedDict

تحتفظ OrderedDict بترتيب الإدراج. ومنذ Python 3.7 تحافظ القواميس العادية أيضًا على الترتيب، لكن OrderedDict تضيف أساليب إضافية للتعامل مع الترتيب لا تتوفر بطريقة أخرى.

from collections import OrderedDict
od = OrderedDict()
od['first'] = 1
od['second'] = 2
print(od)

move_to_end

تنقل .move_to_end(key) مفتاحًا إلى النهاية، أو إلى البداية باستخدام last=False. وهذه الوظيفة متوفرة بشكل فريد في OrderedDict ومفيدة لمنطق شبيه بذاكرة التخزين المؤقت الأقل استخدامًا حديثًا (LRU).

from collections import OrderedDict
od = OrderedDict(a=1, b=2, c=3)
od.move_to_end('a')
print(list(od.keys()))
od.move_to_end('c', last=False)
print(list(od.keys()))

المساواة الحساسة للترتيب

يتساوى كائنان من نوع OrderedDict فقط إذا كانت عناصرهما بالترتيب نفسه. أما القواميس العادية فتتجاهل الترتيب عند المقارنة.

from collections import OrderedDict
a = OrderedDict([('x', 1), ('y', 2)])
b = OrderedDict([('y', 2), ('x', 1)])
print(a == b)
print(dict(a) == dict(b))

اختبار سريع

كيف تنشئ نسخة معدّلة من namedtuple، مع أنها غير قابلة للتغيير؟

مراجعة: namedtuple وOrderedDict

ملخص:

  • تنشئ namedtuple(name, fields) سجلات واضحة وغير قابلة للتغيير مع إمكانية الوصول إليها باستخدام الأسماء.
  • استخدم ._replace() لإنشاء نسخ معدّلة، و._asdict() للتحويل إلى قاموس.
  • تحافظ OrderedDict على ترتيب الإدراج وتضيف .move_to_end().
  • تكون المساواة بين OrderedDict حساسة للترتيب، بخلاف القاموس العادي.
from collections import namedtuple
Pt = namedtuple('Pt', ['x', 'y'])
print(Pt(1, 2)._asdict())

الأسئلة الشائعة

هل درس «namedtuple وOrderedDict» مجاني؟

نعم — نص درس «namedtuple وOrderedDict» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.

ماذا ستتعلم في «namedtuple وOrderedDict»؟

تعرّف على مجموعات أخرى مفيدة تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟

لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «namedtuple وOrderedDict»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟

نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. Counter
  2. defaultdict
  3. deque
  4. namedtuple وOrderedDict
← العودة إلى Python Academy