القواميس dict في بايثون

من موسوعة حسوب
مراجعة 08:39، 22 مايو 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

القواميس هي مجاميع غير مرتّبة من أزواج (مفتاح: قيمة) (key: value) مع اشتراط كون المفاتيح ذات قيم فريدة (ضمن القاموس الواحد). يمكن استخدام الأقواس المعقوفة {} لإنشاء قاموس فارغ.

>>> tel = {'jack': 4098, 'sape': 4139}
>>> tel['guido'] = 4127
>>> tel
{'sape': 4139, 'guido': 4127, 'jack': 4098}
>>> tel['jack']
4098

تأخذ القواميس مسمّيات مختلفة في لغات البرمجة الأخرى، مثل الذواكر الترابطية (associative memories) أو المصفوفات الترابطية (associative arrays).

تختلف القواميس عن أنواع التسلسلات الأخرى في طريقة الفهرسة، فالقوائم والمجموعات تكون مفهرسة بواسطة مدى محدد من الأرقام، في حين أنّ القواميس تكون مفهرسة بواسطة المفاتيح (keys).

يمكن استخدام أي نوع من أنواع البيانات غير القابلة للتغيير (immutable) كمفاتيح في القواميس، مثل السلاسل النصية والأرقام، أو الصفوف التي تتضمن سلاسل نصية أو أعداد أو صفوف، ولكن بشرط أن لا تتضمن - بصورة مباشرة أو غير مباشرة - أي كائن قابل للتغيير. وبطبيعة الحال لا يمكن استخدام القوائم كمفاتيح نظرًا لأنّها كائنات قابلة للتغيير بواسطة الإسناد عن طريق الفهارس أو الاقتطاع أو توابع مثل append()‎ و extend().

في حال إضافة قائمة بأزواج (مفتاح: قيمة) داخل الأقواس المعقوفة فإنّ اللغة تضيف هذه الأزواج كقيمة ابتدائية في القاموس، وتستخدم اللغة طريقة العرض هذه عندما تعرض القواميس كمخرجات.

إنّ العمليات الرئيسية التي تؤديها القواميس هي تخزين قيمة مع مفتاح معين، واستخراج تلك القيمة بواسطة المفتاح الخاصّ بها.

يمكن حذف زوج (مفتاح: قيمة) باستخدام الكلمة المفتاحية del:

>>> del tel['sape']

في حال تخزين قيمة باستخدام مفتاح مستخدم سابقًا، فإنّ القيمة السابقة لذلك المفتاح ستهمل وستربط اللغة القيمة الجديدة بهذا المفتاح.

>>> tel['jack']
4098
>>> tel['jack'] = 9841
>>> tel['jack']
9841

تطلق اللغة خطأ KeyError في حال استخراج قيمة باستخدام مفتاح غير موجود ضمن القاموس:

>>> tel['rosy']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'rosy'

يمكن الحصول على قائمة عشوائية بالمفاتيح الموجودة ضمن القاموس باستخدام الدالة list():

>>> list(tel.keys())
['jack', 'guido']

وللحصول على قائمة مرتّبة بالمفاتيح فيمكن استخدام الدالة sorted():

>>> sorted(tel.keys())
['guido', 'jack']

للتحقق من وجود مفتاح معين في القاموس يمكن استخدام الكلمة المفتاحية in:

>>> 'guido' in tel
True
>>> 'jack' not in tel
False

تستخدم الدالة dict()‎ لإنشاء قواميس بصورة مباشرة من تسلسلات من أزواج (مفتاح، قيمة)، كما يلي:

>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{'sape': 4139, 'jack': 4098, 'guido': 4127}

يمكن كذلك الاستفادة من dict comprehensions لإنشاء قواميس من عبارات (مفتاح: قيمة) متنوعة:

>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}

عندما تكون المفاتيح سلاسل نصية بسيطة، يمكن استخدام معاملات مفتاحية لتعيين الأزواج، كما في المثال التالي:

>>> dict(sape=4139, guido=4127, jack=4098)
{'sape': 4139, 'jack': 4098, 'guido': 4127}

الدوال التابعة للكائن dict

dict.clear()‎

تحذف الدالة جميع عناصر القاموس.

dict.copy()‎

تؤدي الدالة عملية نسخ سطحية (shallow copy) للقاموس.

dict.fromkeys()‎

تنشئ الدالة قاموسًا جديدًا من التسلسل الذي يحدّده المستخدم في المعاملات.

dict.get()‎

تعيد الدالة القيمة المرتبطة بالمفتاح الذي يحدّده المستخدم.

dict.items()‎

تعيد الدالة عرضًا جديدًا لعناصر القاموس بهيئة (مفتاح، قيمة).

dict.keys()‎

تعيد الدالة عرضًا جديدًا يتضمّن جميع مفاتيح القاموس.

dict.pop()‎

تحذف الدالة المفتاح المحدد في المعاملات من القاموس.

dict.popitem()‎

تحذف الدالة زوج (مفتاح، قيمة) عشوائيًا من القاموس.

dict.setdefault()‎

تعيد الدالة قيمة المفتاح المحدد في المعاملات إن كان موجودًا. أما إن كان المفتاح غير موجود في القاموس فإنّ الدالة تضيف المفتاح مع القيمة المحدّدة له إلى القاموس.

dict.update()‎

تحدّث الدالةُ القاموسَ بزوج (مفتاح، قيمة) من قاموس أو كائن آخر قابل للتكرار.

dict.values()‎

تعرض الدالة قيم المفاتيح الخاصة بالقاموس.

انظر أيضًا

مصادر