استخدام دالة collections.defaultdict() لإنشاء قواميس مع قيم افتراضية في Python

تمت الكتابة بواسطة: عبد الحكيم

تارخ آخر تحديث: 21 سبتمبر 2024

محتوى المقال

استخدام دالة collections.defaultdict() لإنشاء قواميس مع قيم افتراضية في Python

القواميس هي إحدى البنى الأساسية في لغة Python، والتي تُستخدم لتخزين بيانات مرتبة في أزواج من المفاتيح والقيم. عندما تحاول الوصول إلى قيمة غير موجودة في قاموس عادي، ينتج عن ذلك خطأ من نوع KeyError. ومع ذلك، هناك طريقة أفضل للتعامل مع هذا الموقف عن طريق استخدام دالة defaultdict() من مكتبة collections التي توفر طريقة مرنة لإنشاء قواميس مع قيم افتراضية يتم إرجاعها إذا لم يكن المفتاح موجودًا.

ما هي دالة defaultdict()؟

دالة defaultdict() هي نوع خاص من القواميس في Python يتم تعريفه في مكتبة collections. بعكس القاموس العادي، الذي يُثير خطأ KeyError عندما تحاول الوصول إلى مفتاح غير موجود، يقوم defaultdict بإرجاع قيمة افتراضية تلقائيًا عند محاولة الوصول إلى مفتاح غير موجود.

يمكن تعريف defaultdict من خلال تقديم دالة تقوم بتوليد القيمة الافتراضية التي سيتم إرجاعها. هذه الدالة تُمرر كمعامل عند إنشاء القاموس.

أهمية defaultdict() في Python

الدالة defaultdict() مهمة لأنها توفر طريقة مريحة وسهلة للتعامل مع القيم غير الموجودة دون الحاجة إلى كتابة شيفرة إضافية للتحقق مما إذا كان المفتاح موجودًا في القاموس. هذا يجعل الكود أكثر نظافة وأقل عرضة للأخطاء.

تُستخدم defaultdict() على نطاق واسع في البرمجة حيث تحتاج إلى تكرار أو تجميع بيانات اعتمادًا على المفاتيح. على سبيل المثال، يمكن استخدامها لحساب عدد تكرار الكلمات في نص أو تجميع البيانات بناءً على مفتاح معين.

إنشاء قاموس باستخدام defaultdict()

لإنشاء قاموس باستخدام defaultdict، تحتاج إلى استيراد مكتبة collections واستخدام الدالة مع نوع القيمة الافتراضية التي ترغب في استخدامها.

from collections import defaultdict

default_dict = defaultdict(int)

# إضافة بعض القيم إلى القاموس
default_dict['key1'] += 1
default_dict['key2'] += 2

print(default_dict)
# الناتج: {'key1': 1, 'key2': 2}

في هذا المثال، استخدمنا defaultdict() مع دالة int() التي تُعيد القيمة الافتراضية 0. إذا تم الوصول إلى مفتاح غير موجود، فستكون القيمة الافتراضية هي 0.

أمثلة عملية على استخدام defaultdict()

مثال 1: عداد الكلمات

في هذا المثال، سنقوم باستخدام defaultdict() لإنشاء عداد للكلمات في نص معين. سيساعدنا هذا المثال في فهم كيف يمكن استخدام defaultdict للتعامل مع البيانات المتكررة.

from collections import defaultdict

word_count = defaultdict(int)

text = "هذه هي المرة الأولى التي أكتب فيها هذا النص. هذا النص يحتوي على بعض الكلمات المتكررة."
words = text.split()

for word in words:
    word_count[word] += 1

print(word_count)

في هذا المثال، قمنا باستخدام defaultdict كعداد للكلمات. كلما واجهنا كلمة جديدة في النص، يقوم القاموس بإنشاء مفتاح جديد لهذه الكلمة مع قيمة افتراضية 0 ثم نزيدها بمقدار 1.

مثال 2: تجميع القيم حسب المفتاح

يعد defaultdict مثاليًا لتجميع البيانات حسب المفاتيح. في هذا المثال، سنقوم بتجميع الأسماء حسب الفئة.

from collections import defaultdict

grouped_data = defaultdict(list)

data = [('أحمد', 'فئة1'), ('سارة', 'فئة2'), ('كريم', 'فئة1')]

for name, category in data:
    grouped_data[category].append(name)

print(grouped_data)

في هذا المثال، استخدمنا defaultdict مع دالة list() لإنشاء قائمة فارغة كقيمة افتراضية. كل فئة تمثل مفتاحًا، وتتم إضافة الأسماء تحت كل فئة.

أنواع أخرى من القيم الافتراضية

بخلاف int وlist، يمكن استخدام أي دالة تُعيد قيمة لتحديد القيمة الافتراضية. إليك بعض الأمثلة الأخرى:

  • set(): لإنشاء مجموعات (sets) كقيم افتراضية.
  • str(): لإنشاء سلاسل نصية فارغة كقيم افتراضية.
  • أي دالة مخصصة يمكن استخدامها لتوليد قيم افتراضية حسب الحاجة.

مثال 3: استخدام set() كقيمة افتراضية

يمكننا استخدام set() كقيمة افتراضية لإنشاء قاموس يحتوي على مجموعات (sets) لتخزين القيم الفريدة.

from collections import defaultdict

unique_values = defaultdict(set)

data = [('أحمد', 30), ('أحمد', 30), ('سارة', 25)]

for name, age in data:
    unique_values[name].add(age)

print(unique_values)

في هذا المثال، استخدمنا set() كقيمة افتراضية للتأكد من أن كل اسم يحتوي على أعمار فريدة فقط.

مقارنة بين القواميس العادية و defaultdict

في القاموس العادي، إذا حاولت الوصول إلى مفتاح غير موجود، فستحصل على خطأ KeyError. لكن مع defaultdict، يتم تجنب هذا الخطأ حيث يتم إرجاع قيمة افتراضية. هذا يجعل الكود أكثر أمانًا وأقل عرضة للأخطاء.

  • القاموس العادي: يحتاج إلى معالجة خاصة عند محاولة الوصول إلى مفاتيح غير موجودة.
  • defaultdict: يوفر قيمة افتراضية تلقائيًا للمفاتيح غير الموجودة، مما يسهل التعامل مع البيانات.

الخلاصة

استخدام defaultdict() من مكتبة collections في Python هو أداة قوية ومرنة للتعامل مع القواميس ذات القيم الافتراضية. سواء كنت تعمل على تجميع البيانات، عداد الكلمات، أو أي نوع من العمليات التي تحتاج إلى التعامل مع القيم غير الموجودة، فإن defaultdict يجعل الكود أكثر وضوحًا وأقل عرضة للأخطاء.

طور مهاراتك: مقالات يجب قراءتها في البرمجة