🗂️ إتقان دوال القاموس (Dictionary Methods) في بايثون

في هذا الدرس، سنتعلم كيفية استخدام الدوال المدمجة (Methods) التي تتيح لنا التعامل مع القواميس (Dictionaries) في لغة بايثون بكل سهولة وكفاءة. هذه الدوال هي أدوات قوية تساعدنا في الوصول إلى البيانات، تعديلها، وحتى تنظيف القاموس بالكامل.


📚 ما هي دوال القاموس (Dictionary Methods)؟

دوال القاموس هي وظائف (Functions) مدمجة داخل كائنات القاموس. يمكننا استدعاؤها مباشرة بعد اسم القاموس باستخدام النقطة .. تخيل أن القاموس مثل صندوق أدوات، وكل دالة هي أداة مختلفة لها وظيفة محددة.

# مثال على قاموس بسيط
student = {"name": "أحمد", "age": 20, "major": "هندسة"}

# استخدام دالة .keys() لرؤية المفاتيح
print(student.keys())  # سيطبع: dict_keys(['name', 'age', 'major'])

في المثال أعلاه، keys() هي إحدى دوال القاموس التي تُرجع لنا جميع المفاتيح الموجودة فيه.


🔑 الدوال الأساسية للوصول إلى البيانات

1. الدالة get()

هذه الدالة آمنة للاستخدام عندما لا نكون متأكدين من وجود مفتاح معين في القاموس. بدلاً من ظهور خطأ إذا كان المفتاح غير موجود، تُرجع الدالة قيمة افتراضية (عادة None).

my_dict = {"a": 1, "b": 2}

# محاولة الوصول إلى مفتاح موجود
value1 = my_dict.get("a")
print(value1)  # المخرجات: 1

# محاولة الوصول إلى مفتاح غير موجود
value2 = my_dict.get("c")
print(value2)  # المخرجات: None (لأن المفتاح 'c' غير موجود)

# يمكننا تحديد قيمة افتراضية بديلة
value3 = my_dict.get("c", "لم يتم العثور على المفتاح!")
print(value3)  # المخرجات: "لم يتم العثور على المفتاح!"

2. الدوال keys() و values() و items()

هذه الدوال تعطينا نظرة سريعة على محتويات القاموس.

  • .keys(): تُرجع قائمة تحتوي على جميع المفاتيح.
  • .values(): تُرجع قائمة تحتوي على جميع القيم.
  • .items(): تُرجع قائمة تحتوي على جميع الأزواج (مفتاح، قيمة) على شكل tuples.
car = {"brand": "Toyota", "model": "Camry", "year": 2022}

print(car.keys())   # المخرجات: dict_keys(['brand', 'model', 'year'])
print(car.values()) # المخرجات: dict_values(['Toyota', 'Camry', 2022])
print(car.items())  # المخرجات: dict_items([('brand', 'Toyota'), ('model', 'Camry'), ('year', 2022)])

هذه الدوال مفيدة جداً عندما نريد التكرار (Loop) خلال محتويات القاموس، وهو ما سنتعلمه لاحقاً.


✏️ الدوال الأساسية لتعديل البيانات

1. الدالة update()

تسمح لنا هذه الدالة بإضافة عدة عناصر إلى القاموس دفعة واحدة، أو تحديث قيمة مفتاح موجود.

# قاموس أساسي
person = {"name": "فاطمة"}

# نريد إضافة العمر والمدينة
new_info = {"age": 25, "city": "الرياض"}

# استخدام update لإضافة المعلومات الجديدة
person.update(new_info)
print(person)  # المخرجات: {'name': 'فاطمة', 'age': 25, 'city': 'الرياض'}

# يمكننا أيضًا التحديث مباشرة
person.update(age=26, job="مطور") # نلاحظ تحديث قيمة 'age' وإضافة 'job'
print(person)  # المخرجات: {'name': 'فاطمة', 'age': 26, 'city': 'الرياض', 'job': 'مطور'}

2. الدالة setdefault()

دالة ذكية تقوم بأمرين:

  1. إذا كان المفتاح موجوداً في القاموس، تُرجع قيمته.
  2. إذا كان المفتاح غير موجود، تقوم بإضافته إلى القاموس بالقيمة الافتراضية التي نحددها.
book = {"title": "الأيام", "author": "طه حسين"}

# المفتاح موجود، سترجع قيمته فقط
author_name = book.setdefault("author", "مؤلف مجهول")
print(author_name) # المخرجات: طه حسين
print(book) # القاموس لم يتغير: {'title': 'الأيام', 'author': 'طه حسين'}

# المفتاح غير موجود، سيتم إضافته
book_pages = book.setdefault("pages", 300)
print(book_pages) # المخرجات: 300
print(book) # المخرجات: {'title': 'الأيام', 'author': 'طه حسين', 'pages': 300}

🗑️ الدوال الأساسية لحذف البيانات

1. الدالة pop()

تقوم هذه الدالة بإزالة عنصر من القاموس بناءً على المفتاح المحدد، وتُرجع قيمته. هذا مفيد عندما نريد استخدام القيمة المحذوفة لاحقاً.

fruits = {"apple": "تفاح", "banana": "موز", "orange": "برتقال"}

# حذف عنصر مفتاحه "banana" وإرجاع قيمته
removed_fruit = fruits.pop("banana")
print(removed_fruit) # المخرجات: موز
print(fruits)        # المخرجات: {'apple': 'تفاح', 'orange': 'برتقال'}

# إذا حاولنا حذف مفتاح غير موجود، سيظهر خطأ unless نحدد قيمة افتراضية
# removed_fruit = fruits.pop("grape") # سيتسبب في خطأ KeyError
safe_removal = fruits.pop("grape", "فاكهة غير موجودة")
print(safe_removal) # المخرجات: فاكهة غير موجودة

2. الدالة popitem()

تقوم بإزالة آخر زوج (مفتاح، قيمة) تم إضافته إلى القاموس وتُرجعه. في الإصدارات الحديثة من بايثون (3.7+)، القواميس تحفظ ترتيب الإضافة.

colors = {"red": "أحمر", "blue": "أزرق"}
colors["green"] = "أخضر" # إضافة لون جديد

# حذف آخر عنصر تمت إضافته (green: أخضر)
last_item = colors.popitem()
print(last_item) # المخرجات: ('green', 'أخضر')
print(colors)    # المخرجات: {'red': 'أحمر', 'blue': 'أزرق'}

3. الدالة clear()

هذه الدالة بسيطة جداً؛ فهي تزيل جميع العناصر من القاموس، تاركة إياه فارغاً.

temp_dict = {"x": 1, "y": 2, "z": 3}
print(temp_dict) # المخرجات: {'x': 1, 'y': 2, 'z': 3}

temp_dict.clear()
print(temp_dict) # المخرجات: {}

📋 الدالة copy() و fromkeys()

1. الدالة copy()

تقوم بإنشاء نسخة سطحية (Shallow Copy) من القاموس. هذا مهم عندما نريد عمل تغييرات على نسخة دون التأثير على القاموس الأصلي.

original = {"name": "علي"}
# نسخ القاموس
new_copy = original.copy()

# إضافة عنصر إلى النسخة الجديدة فقط
new_copy["age"] = 30

print("الأصلي:", original) # المخرجات: الأصلي: {'name': 'علي'}
print("النسخة:", new_copy) # المخرجات: النسخة: {'name': 'علي', 'age': 30}

2. الدالة fromkeys()

هذه دالة منهجية (Static Method)، مما يعني أننا نستدعيها من اسم الفئة dict نفسه وليس من كائن قاموس محدد. وظيفتها هي إنشاء قاموس جديد من قائمة مفاتيح، مع تعيين نفس القيمة لجميعها.

# إنشاء قاموس جديد حيث تكون قيمة جميع المفاتيح 0
keys_list = ['math', 'science', 'history']
new_dict = dict.fromkeys(keys_list, 0)

print(new_dict) # المخرجات: {'math': 0, 'science': 0, 'history': 0}

🎯 خلاصة الدرس

تعلمنا في هذا الدرس أهم دوال القاموس التي تمنحنا تحكماً كاملاً في البيانات المخزنة داخله. تذكر أن:

  • استخدام get() أكثر أماناً من الوصول المباشر بالمفتاح.
  • keys(), values(), و items() ممتازة لاستكشاف محتوى القاموس.
  • update() و setdefault() هما الأداتان الرئيسيتان للإضافة والتحديث.
  • pop(), popitem(), و clear() تستخدم للحذف بطرق مختلفة.
  • copy() تنشئ نسخة مستقلة، و fromkeys() تنشئ قاموساً جديداً من قائمة مفاتيح.