flowchart TD Collection[<b>الجمع</b> <br> <code>Collection</code>] Collection --> Mapping[<b>الاقتران</b> <br> <code>Mapping</code>] Mapping --> MutableMapping[<b>الاقتران المتغير</b> <br> <code>MutableMapping</code>] MutableMapping --> dict[<b>القاموس</b> <br> <code>dict</code>]
8 القاموس
وراجع خريطة المجموعات: شكل 1
القاموس (dict
) جمع متغير مرتب، العنصر فيه مرقوم فريد مقابل لقيمة.
- متغير: يعني أنها تقبل الإضافة والحذف والتعديل
- مرتب: يعني أن لكل عنصرٍ موضعًا بالنسبة لبدايته.
- مرقوم: هي القابلة للرقم (
hash
) - وسيأتي بيانه - فريد: يعني أن العنصر لا يتكرر فيها
- مقابل لقيمة: أي أن لكل عنصر قيمة مرتبطة به. وهذه الخاصية التي تميز القاموس (
dict
) عن المجموعة (set
)
تنشأ المجموعة الرابطة بالإجراء المنشئ dict()
أو بالقوسين المتعرجين {}
وذلك على النحو التالي:
وفي كل اقتران نضيفه إلى قائمة الاقتران (القاموس):
- يسمى المتغير
key1
المفتاح (ويشترط أن يكون مرقومًا) - ويسمى ما يقترن به بالقيمة
value1
يستعمل القاموس في كثير من السياقات في البرمجة، وهو من أهم هياكل البيانات.
استعمالات القاموس
الكلمة ومعناها
القاموس بالمعنى الذي يشير إليه اللفظ. نفترض أن لدينا قاموسًا يحتوي على ترجمة بعض الكلمات من الإنجليزية إلى العربية:
ربط الأسماء بالأرقام
مثلاً: دليل أرقام الهواتف هو قاموس:
دليل أسماء النطاقات
وكذلك دليل أسماء النطاقات (DNS: Domain Name System) على شبكة الانرتنت هو قاموس:
اختصار الروابط الطويلة
من استعمالات القاموس: اختصار الروابط الطويلة في روابط قصيرة.
الكلمات المختصرة
أو الاختصارات إلى الكلمة التامة:
القاموس (dict
)
ومن حيث كون القاموس من نوع الجمع (Collection
)، فإنه يقبل الإجراءات ثلاثة:
- العضوية:
x not in d
- العد:
len(d)
- التكرار:
for x in d
ويقبل القاموس لكونه اقترانًا (Mapping
) الإجراءات التالية:
- الإشارة مفتاح:
dict[key]
- الإشارة بمفتاح مع الرجوع بقيمة ابتدائية إن لم يُعثَر عليه:
dict.get(key[, default])
ولكونه اقترانًا متغيرًا (MutableMapping
)، فإنه يقبل الإجراءات التالية:
- التعديل بمفتاح:
dict[key] = value
- الحذف بمفتاح:
del dict[key]
- نزع بمفتاح وإرجاع القيمة:
x = dict.pop(key)
- التحديث:
dict.update(mapping)
راجع خريطة الجموع: شكل 1.
وهذه كذلك، كلها مرقومات، ولا يشترط أن تكون متجانسة (من نفس النوع)، كما يلي:
ونحصل عليها بالإشارة بمرقوم:
التضمين
يجوز جعل القيمة نفسها قاموسًا. ومثال ذلك حفظ اختيارات المستخدم هكذا:
وللوصول إلى قيمة مضمَّنة، نستعمل الإشارة بالمفتاح مرتين، هكذا:
التكرار
ويجوز التكرار بثلاثة طرق:
- كر العناصر:
for key, value in d.items()
- كر المفاتيح:
for key in d.keys()
- كر القيم:
for value in d.values()
مثال:
عكس القاموس
إذا أردت عكس القاموس بحيث يصير المفتاح مكان القيمة والقيمة مكان المفتاح، فبهذه الطريقة:
d = {
'ASAP': 'As soon as possible',
'TBD': 'To be determined',
'IDK': 'I don\'t know',
}
inverse = dict()
for k, v in d.items():
inverse[v] = k
inverse
{'As soon as possible': 'ASAP',
'To be determined': 'TBD',
"I don't know": 'IDK'}
أو بالجملة المختصرة:
إنشاء قاموس من سلسلتين
ويتحصل القاموس من سلسلتين باستعمال الإجراء zip()
، كما يلي: