استخدام دالة collections.defaultdict() لإنشاء قواميس مع قيم افتراضية في Python
تمت الكتابة بواسطة: عبد الحكيم
تارخ آخر تحديث: 21 سبتمبر 2024محتوى المقال
- ما هي دالة defaultdict()؟
- أهمية defaultdict() في Python
- أمثلة عملية على استخدام defaultdict()
- أنواع أخرى من القيم الافتراضية
- مقارنة بين القواميس العادية و defaultdict
- الخلاصة
القواميس هي إحدى البنى الأساسية في لغة 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
يجعل الكود أكثر وضوحًا وأقل عرضة للأخطاء.