📘 القواميس (Dictionaries) في بايثون: هياكل البيانات المرنة
مرحباً بك في درس جديد من دروس سلسلة تعلم بايثون! اليوم سنتعرف على واحد من أهم هياكل البيانات في Python، وهو القاموس (Dictionary). إذا كنت تتذكر قوائم (Lists)، فالقواميس تشبهها ولكن بطريقة أكثر تنظيماً وقوة! 🚀
🤔 ما هو القاموس (Dictionary)؟
القاموس هو هيكل بيانات يستخدم لتخزين مجموعة من القيم، ولكن بدلاً من استخدام الأرقام كفهارس (مثل القوائم)، يستخدم القاموس مفاتيح (Keys). يمكنك التفكير فيه كقاموس لغوي حقيقي: تبحث عن كلمة (المفتاح) لتحصل على معناها (القيمة).
الخصائص الرئيسية للقاموس:
- غير مرتب (في إصدارات بايثون القديمة < 3.7): لا يتم تخزين العناصر بترتيب محدد.
- قابل للتغيير (Mutable): يمكنك إضافة عناصر جديدة، إزالتها، أو تعديلها بعد الإنشاء.
- لا يسمح بتكرار المفاتيح: كل مفتاح في القاموس يجب أن يكون فريداً. إذا أضفت مفتاحاً موجوداً مسبقاً، فسيتم تحديث قيمته.
🔨 كيفية إنشاء قاموس
أسهل طريقة لإنشاء قاموس هي وضع عناصره داخل أقواس معقوفة {}، حيث يكون كل عنصر على صورة مفتاح: قيمة، ويفصل بين العناصر بفاصلة.
# إنشاء قاموس فارغ
my_empty_dict = {}
# إنشاء قاموس لتخزين معلومات طالب
student = {
"name": "أحمد",
"age": 20,
"major": "هندسة البرمجيات",
"GPA": 3.75
}
# طباعة القاموس كاملاً
print(student)
ماذا يحدث في الكود أعلاه؟
قمنا بإنشاء قاموس student يحتوي على 4 عناصر. المفتاح "name" قيمته "أحمد"، والمفتاح "age" قيمته 20، وهكذا.
🔍 الوصول إلى القيم داخل القاموس
لا يمكنك استخدام الأرقام كفهرس للوصول للبيانات كما في القوائم. بدلاً من ذلك، استخدم المفتاح الموضوعة داخل أقواس مربعة [].
student = {"name": "أحمد", "age": 20, "major": "هندسة البرمجيات"}
# الوصول إلى قيمة المفتاح "name"
print(student["name"]) # الناتج: أحمد
# الوصول إلى قيمة المفتاح "age"
print(student["age"]) # الناتج: 20
⚠️ ما الخطأ في هذا الكود؟
print(student["phone_number"]) # سيتسبب في خطأ!
سيظهر خطأ KeyError لأن المفتاح "phone_number" غير موجود في القاموس. لحل هذه المشكلة، يمكننا استخدام الطريقة .get().
الطريقة الآمنة: استخدام .get()
تتيح لك هذه الطريقة الوصول إلى قيمة مفتاح معين، وإرجاع قيمة افتراضية (مثل None) إذا لم يكن المفتاح موجوداً، مما يمنع حدوث الأخطاء.
# البحث عن مفتاح موجود
print(student.get("name")) # الناتج: أحمد
# البحث عن مفتاح غير موجود
print(student.get("phone_number")) # الناتج: None (لا شيء، ولكن بدون خطأ)
# يمكنك تحديد قيمة افتراضية بديلة
print(student.get("phone_number", "لم يتم إضافة رقم")) # الناتج: لم يتم إضافة رقم
✏️ إضافة عناصر جديدة أو تعديل القيم
لإضافة عنصر جديد، كل ما عليك فعله هو تعيين قيمة لمفتاح جديد.
student = {"name": "أحمد", "age": 20}
# إضافة عنصر جديد (المفتاح "major" غير موجود)
student["major"] = "هندسة البرمجيات"
print(student) # الناتج: {'name': 'أحمد', 'age': 20, 'major': 'هندسة البرمجيات'}
# تعديل قيمة عنصر موجود (المفتاح "age" موجود)
student["age"] = 21
print(student) # الناتج: {'name': 'أحمد', 'age': 21, 'major': 'هندسة البرمجيات'}
🗑️ حذف العناصر من القاموس
يمكنك حذف عنصر باستخدام الكلمة المفتاحية del.
student = {"name": "أحمد", "age": 20, "major": "هندسة البرمجيات"}
# حذف العنصر الذي مفتاحه "age"
del student["age"]
print(student) # الناتج: {'name': 'أحمد', 'major': 'هندسة البرمجيات'}
🔧 أهم الطرق (Methods) الأساسية للقواميس
إليك بعض الطرق المفيدة جداً للتعامل مع القواميس:
.keys(): تُرجع قائمة تحتوي على جميع المفاتيح في القاموس..values(): تُرجع قائمة تحتوي على جميع القيم في القاموس..items(): تُرجع قائمة تحتوي على جميع العناصر على شكل tuples(مفتاح, قيمة).
student = {"name": "أحمد", "age": 20, "major": "هندسة البرمجيات"}
# الحصول على جميع المفاتيح
print(student.keys()) # الناتج: dict_keys(['name', 'age', 'major'])
# الحصول على جميع القيم
print(student.values()) # الناتج: dict_values(['أحمد', 20, 'هندسة البرمجيات'])
# الحصول على جميع العناصر (مفيد جداً للتكرار)
print(student.items()) # الناتج: dict_items([('name', 'أحمد'), ('age', 20), ('major', 'هندسة البرمجيات')])
🧪 مثال تطبيقي بسيط: دفتر العناوين
لنطبق ما تعلمناه في مثال واقعي. سننشئ دفتر عناوين بسيطاً.
# إنشاء دفتر عناوين
address_book = {
"أميرة": "0551234567",
"خالد": "0507654321"
}
# إضافة صديق جديد
address_book["سارة"] = "0540001111"
# البحث عن رقم خالد
print("رقم خالد هو:", address_book.get("خالد"))
# حذف جهة اتصال
del address_book["أميرة"]
# طباعة جميع الأسماء (المفاتيح) في الدفتر
print("جهات الاتصال لدي:")
for name in address_book.keys():
print("-", name)
🎓 اختبر نفسك
التعليقات
شاركنا رأيك أو أسئلتك حول هذا المقال