تطبيقات
الكلمة ومعناها
القاموس بالمعنى الذي يشير إليه اللفظ. نفترض أن لدينا قاموسًا يحتوي على ترجمة بعض الكلمات من الإنجليزية إلى العربية:
ربط الأسماء بالأرقام
مثلاً: دليل أرقام الهواتف هو قاموس:
وكذلك دليل أسماء النطاق (DNS: Domain Name System) على شبكة الانرتنت هو قاموس:
اختصار الروابط الطويلة
من استعمالات القاموس: اختصار الروابط الطويلة في روابط قصيرة.
الاختصارات
أو الاختصارات إلى الكلمة التامة:
ويمكن عكس القاموس بالطريقة التالية:
سلة المشتريات
نفترض أن لدينا سلة تحتوي على مشتريات العميل (basket
)، ونريد حساب القيمة الإجمالية لها، ولدينا قائمة بأسعار الفواكه. فنعرف الأسعار على أنها قاموس prices
بحيث يشير اسم الفاكهة إلى سعرها (قيمتها المالية).
يجوز تحديث الأسعار هكذا:
أو بالمجموع هكذا:
والآن نفترض أن لدينا قائمة بالفواكه التي يريدها العميل:
نحسب سعر كل فاكهة في السلة بناءً على الأسعار الموجودة في القاموس:
تسجيل تفضيلات المستخدم
يجوز أن تكون قيمة المرقوم قاموسًا؛ وهذا يعني أن القاموس قد يتضمن قاموسًا.
هذا المثال يوضح استعمالًا شائعًا لذلك، وهو ترتيب معلومات أو تفضيلات المستخدم.
وللوصول إلى قيمة مضمَّنة، نستعمل الإشارة مرتين، هكذا:
أما حفظها فسيأتي الكلام عن حفظ البيانات في باب كتابة الملفات وقراءتها إن شاء الله.
الذاكرة القريبة
يجوز أن تسجل نتيجة طلب فعل بمدخلات معيَّنة. حتى إذا ما تكرر الطلب نفس المدخلات؛ توفِّر تكلفة استدعائه بإرجاع النتيجة المحفوظة. وهذا يفيد في أمرين:
- الاقتصاد في موارد المعالجة، خصوصًا عند تعقد العمليات.
- تقليل وقت الاستجابة.
ويشترط أن يكون الفعل نقيًّا. (انظر قسم الفعل النقي في باب الفعل).
بل إن بايثون توفر هذه الخاصية للدوال عن طريق المزيِّن (decorator) @functools.lru_cache
، هكذا:
لاحظ عدم الحاجة لتعريف القاموس factorial_table
، بل يقوم المزيِّن هو بذلك تلقائيًّا.
استعمال الإنشاء المختصر
تقدم معنا الكلام عن الإنشاء المختصر. وسنستعرضه الآن مع القاموس.
عكس قاموس بحيث تصبح الدلائل هي القيم والقيم هي الدلائل:
idx2label = {
0: 'cat',
1: 'dog',
2: 'bird',
}
label2idx = {label: idx for idx, label in idx2label.items()}
label2idx
{'cat': 0, 'dog': 1, 'bird': 2}
هنا مثال لقاموس من الفواكه، نريد ترشيح ما قيمته أقل من 20:
menu = {
'apple': 15,
'banana': 10,
'orange': 5,
'cantaloupe': 40
}
filtered_menu = {key: value for key, value in menu.items() if value < 20}
filtered_menu
{'apple': 15, 'banana': 10, 'orange': 5}
وهذا مثال أكثر تعقيدًا. نطبق خصم 20% فقط على العناصر التي يكون سعرها أعلى من المتوسط، مع الحفاظ على بقية الأسعار كما هي. لاحظ أن التعبير هنا هو تعيين شرطي: value * (1 - discount) if value > avg_price else value
وليس هو قطعة الترشيح (if
)؛ إذ تلك تأتي في نهاية الجملة، بعد قطعة التكرار (for
).
menu = {
'apple': 15,
'banana': 10,
'orange': 5,
'cantaloupe': 40
}
avg_price = sum(menu.values()) / len(menu)
discount = 0.20
discounted_menu = {
key: value * (1 - discount) if value > avg_price else value
for key, value in menu.items()
}
discounted_menu
{'apple': 15, 'banana': 10, 'orange': 5, 'cantaloupe': 32.0}