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

من موسوعة حسوب

القواميس هي مجاميع غير مرتّبة من أزواج (مفتاح: قيمة) (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) كمفاتيح في القواميس، مثل السلاسل النصية والأرقام، أو الصفوف التي تتضمن سلاسل نصية أو أعداد أو صفوف، ولكن بشرط أن لا تتضمن - بصورة مباشرة أو غير مباشرة - أي كائن قابل للتغيير. وبطبيعة الحال لا يمكن استخدام القوائم lists كمفاتيح نظرًا لأنّها كائنات قابلة للتغيير بواسطة الإسناد عن طريق الفهارس أو الاقتطاع أو توابع مثل append()‎ و extend()‎.

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

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

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

>>> del tel['sape']

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

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

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

>>> 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}

مصادر