تطبيقات

الأجزاء المنتمية إلى الكل

أو الاختصارات إلى الكلمة التامة:

animal_class = {
    "Dog": "Mammalia",
    "Cat": "Mammalia",
    "Elephant": "Mammalia",
    "Snake": "Reptilia",
    "Lizard": "Reptilia",
    "Frog": "Amphibia",
}

نريد عكس هذه القائمة أيضًا بحيث نستطيع أن نعرف من الصنف كل الحيوانات المتنمية إليه.

نأتي على جميع المفاتيح في القاموس الأول ونضيفها بحسب القيمة التي تقابلها:

class_animal = {}
for animal, clazz in animal_class.items():
    if clazz not in class_animal:
        class_animal[clazz] = []
    class_animal[clazz].append(animal)
class_animal
{'Mammalia': ['Dog', 'Cat', 'Elephant'],
 'Reptilia': ['Snake', 'Lizard'],
 'Amphibia': ['Frog']}

لاحظ استعمال اسم clazz بدل class لأن كلمة class أصلية في لغة بايثون فلا يجوز استعمالها كمتغير.

سلة المشتريات

نفترض أن لدينا سلة تحتوي على مشتريات العميل (basket)، ونريد حساب القيمة الإجمالية لها، ولدينا قائمة بأسعار الفواكه. فنعرف الأسعار على أنها قاموس prices بحيث يشير اسم الفاكهة إلى سعرها (قيمتها المالية).

prices = {
    'apple': 15.25,
    'banana': 10.50,
    'orange': 5.75,
    'cantaloupe': 40.00
}

يجوز تحديث الأسعار هكذا:

prices['banana'] = 12
prices['orange'] = 15

أو تحديثها بالإجراء update():

prices.update({'banana': 12, 'orange': 15})
prices
{'apple': 15.25, 'banana': 12, 'orange': 15, 'cantaloupe': 40.0}

والآن نفترض أن لدينا قائمة بالفواكه التي يريدها العميل:

basket = ['apple', 'apple', 'banana', 'orange', 'banana']

نحسب سعر كل فاكهة في السلة بناءً على الأسعار الموجودة في القاموس:

total = 0

for fruit in basket:
    total += prices[fruit]

print(total)
69.5

أو تستطيع أن تعدها أولاً ثم تضربها بالسعر:

counts = dict()
for fruit in set(basket):
    counts[fruit] = basket.count(fruit)
counts
{'banana': 2, 'apple': 2, 'orange': 1}

ثم تضربها بالسعر:

total = sum(counts[fruit] * prices[fruit] for fruit in counts)
total
69.5

استعمال الإنشاء المختصر

تقدم معنا الكلام عن الإنشاء المختصر. وسنستعرضه الآن مع القاموس.

هنا مثال لقاموس من الفواكه، نريد ترشيح ما قيمته أقل من 20:

menu = {
    'apple': 15,
    'banana': 10,
    'orange': 5,
    'cantaloupe': 40
}

filtered_menu = {k: v for k, v in menu.items() if v < 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 = {
    k: v * (1 - discount) if v > avg_price else v
    for k, v in menu.items()
}
discounted_menu
{'apple': 15, 'banana': 10, 'orange': 5, 'cantaloupe': 32.0}