القواميس في Python (Dictionaries)
القوائم ممتازة لحفظ أشياء مرتبة، لكنك تصل إليها بأرقام: students[0] و students[1]. ماذا لو أردت أن تصل إلى المعلومة باسمها؟ مثل «ما عمر منى؟» أو «كم سعر الشاي؟». في هذا الدرس ستتعلم القواميس (Dictionaries)، وهي من أقوى أدوات Python وأكثرها استخداماً.
ما هو القاموس؟
Section titled “ما هو القاموس؟”القاموس يحفظ البيانات على شكل أزواج: مفتاح وقيمة. تخيّل قاموس اللغة الحقيقي: تبحث عن الكلمة (المفتاح) فتجد معناها (القيمة). ولا تقرأ القاموس من أوله، بل تذهب مباشرة إلى الكلمة.
student = {"name": "منى", "age": 14, "city": "طنطا"}print(student){'name': 'منى', 'age': 14, 'city': 'طنطا'}القاموس يُكتب بين قوسين معقوفين { }، وكل عنصر فيه مكتوب على شكل مفتاح: قيمة، وبين العناصر فواصل. المفاتيح غالباً نصوص، والقيم يمكن أن تكون من أي نوع.
القراءة من القاموس
Section titled “القراءة من القاموس”تكتب المفتاح بين قوسين مربعين:
print(student["name"])منىلكن ماذا لو طلبت مفتاحاً غير موجود؟
print(student["phone"])KeyError: 'phone'الدالة get: القراءة الآمنة
Section titled “الدالة get: القراءة الآمنة”الدالة get لا تسبب خطأ إذا لم يكن المفتاح موجوداً، بل تُرجع None، أو قيمة افتراضية تحددها أنت:
print(student.get("phone"))print(student.get("phone", "غير مسجل"))Noneغير مسجلالتعديل والإضافة والحذف
Section titled “التعديل والإضافة والحذف”student["age"] = 15 # تعديل قيمة موجودةstudent["school"] = "مدرسة النور" # إضافة مفتاح جديدdel student["city"] # حذف مفتاحprint(student)print(len(student))print("name" in student){'name': 'منى', 'age': 15, 'school': 'مدرسة النور'}3Trueلاحظ أن التعديل والإضافة يُكتبان بنفس الطريقة: إذا كان المفتاح موجوداً تتغير قيمته، وإذا لم يكن موجوداً يُضاف. والكلمة in تبحث في المفاتيح.
المرور على القاموس
Section titled “المرور على القاموس”prices = {"شاي": 10, "قهوة": 25}
for item in prices: print(item)
for item, price in prices.items(): print(f"{item}: {price} جنيه")شايقهوةشاي: 10 جنيهقهوة: 25 جنيه- المرور المباشر على القاموس يعطيك المفاتيح.
- الدالة
items()تعطيك المفتاح والقيمة معاً في كل دورة. وهي الطريقة الأكثر استخداماً.
ويمكنك الحصول على المفاتيح أو القيم وحدها:
print(list(prices.keys()))print(list(prices.values()))['شاي', 'قهوة'][10, 25]مثال عملي: عدّ تكرار الكلمات
Section titled “مثال عملي: عدّ تكرار الكلمات”هذا مثال كلاسيكي يوضح قوة القواميس: كم مرة تكررت كل كلمة في نص؟
text = "تفاح موز تفاح عنب موز تفاح"counts = {}
for word in text.split(): counts[word] = counts.get(word, 0) + 1
print(counts){'تفاح': 3, 'موز': 2, 'عنب': 1}في كل دورة: نقرأ العدد الحالي للكلمة بـ get (أو صفر إذا كانت أول مرة)، ونزيده واحداً. خمسة أسطر فقط لحل مشكلة حقيقية!
قائمة من القواميس
Section titled “قائمة من القواميس”في البرامج الحقيقية، ستجد كثيراً قائمة كل عنصر فيها قاموس، مثل قائمة منتجات:
products = [ {"name": "قلم", "price": 5}, {"name": "حقيبة", "price": 120},]
for p in products: print(p["name"], p["price"])قلم 5حقيبة 120هذا الشكل يشبه تماماً البيانات التي تأتي من المواقع والتطبيقات بصيغة JSON.
جرّب بنفسك
Section titled “جرّب بنفسك”اكتب برنامج «دفتر هاتف» صغيراً:
- أنشئ قاموساً فيه اسمان وأرقام هواتفهما.
- أضف اسماً ثالثاً.
- اسأل المستخدم عن اسم، واطبع رقمه إن كان موجوداً، أو «غير موجود في الدفتر» إن لم يكن.
مثال على التشغيل:
عن من تبحث؟ سارةرقم سارة: 01012345678تلميح: استخدم get مع قيمة افتراضية، أو افحص بـ in.
أخطاء شائعة
Section titled “أخطاء شائعة”- KeyError: قراءة مفتاح غير موجود بالأقواس المربعة. استخدم
getأو افحص بـinأولاً. - الخلط بين المفتاح والقيمة في البحث:
"منى" in studentتبحث في المفاتيح وليس في القيم، فتعطيFalse. - نسيان علامات التنصيص حول المفتاح:
student[name]تبحث عن متغير اسمهname. الصحيحstudent["name"].
اختبر نفسك
Section titled “اختبر نفسك”سؤال
إذا كان d = {'a': 1}، فما ناتج d.get('b', 0)؟
المفتاح غير موجود، فتُرجع get القيمة الافتراضية التي حددناها وهي 0.
سؤال
ما الدالة التي تعطيك المفتاح والقيمة معاً في الحلقة؟
items() تُرجع أزواج (مفتاح، قيمة)، فتكتب for key, value in d.items():.
الخلاصة
Section titled “الخلاصة”- القاموس يحفظ أزواج
مفتاح: قيمةبين{ }، وتصل للقيمة بمفتاحها. d["key"]تسببKeyErrorإذا لم يوجد المفتاح، وd.get("key", افتراضي)آمنة.- الإسناد
d["key"] = قيمةيعدّل أو يضيف، وdelتحذف. for key, value in d.items():للمرور على المفاتيح والقيم معاً.- قوائم القواميس شكل شائع جداً لتمثيل البيانات.