logo

الإفتراضي في بايثون

القاموس عبارة عن مجموعة غير مرتبة من قيم البيانات في لغة بايثون المستخدمة لتخزين قيم البيانات مثل الخرائط. يحتفظ القاموس بأزواج القيمة الرئيسية بدلاً من الاحتفاظ بقيمة واحدة كعنصر مثل أنواع البيانات الأخرى. يجب أن يكون المفتاح المطبق في القاموس فريدًا وغير قابل للتغيير. أي أن صف Python يمكن أن يكون مفتاحًا، لكن قائمة Python لا يمكن أن تكون مفتاحًا في القاموس. يمكننا إنشاء قاموس عن طريق وضع سلسلة من العناصر داخل الأقواس المتعرجة {}، ويمكن للفاصلة '،' أن تفصل بين القيم.

مثال 1:

 Dict_1 = {1: 'A', 2: 'B', 3: 'C', 4: 'D'} print ('Dictionary: ') print (Dict_1) print ('key pair 1: ', Dict_1[1]) print ('key pair 3: ', Dict_1[3]) 

انتاج:

 Dictionary: {1: 'A', 2: 'B', 3: 'C', 4: 'D'} key pair 1: A key pair 3: C 

ولكن إذا حاولنا طباعة قيمة المفتاح الخامس، فسوف نحصل على الخطأ لأنه 'ديكت_1' لا يحتوي على قيمة المفتاح الخامس.

مثال 2:

 Dict_1 = {1: 'A', 2: 'B', 3: 'C', 4: 'D'} print ('Dictionary: ') print (Dict_1) print ('key pair 5: ', Dict_1[5]) 

انتاج:

 Dictionary: {1: 'A', 2: 'B', 3: 'C', 4: 'D'} --------------------------------------------------------------------------- KeyError Traceback (most recent call last) in 2 print ('Dictionary: ') 3 print (Dict_1) ----> 4 print ('key pair 5: ', Dict_1[5]) KeyError: 5 

كلما خطأ رئيسي يتم رفعه، فقد يصبح مشكلة للمستخدمين. يمكننا التغلب على هذا الخطأ باستخدام قاموس آخر لبايثون، وهو يشبه الحاوية المعروفة باسم Defaultdict . يمكن للمستخدمين العثور على هذا القاموس داخل ملف 'مجموعات' وحدة.

com.defaultdict

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

بناء الجملة:

 defaultdict(default_factory) 

حدود:

    default_factory:تقوم الدالة default_factory() بإرجاع القيمة الافتراضية التي حددها المستخدم للقاموس المحدد من قبله. إذا كانت هذه الوسيطة غائبة، فسيقوم القاموس برفع خطأ KeyError.

مثال:

 from collections import defaultdict as DD # Function for returning a default values for the # keys which are not present in the dictionary def default_value(): return 'This key is not present' # Now, we will define the dict dict_1 = DD(default_value) dict_1['ABC'] = 1 dict_1['DEF'] = 2 dict_1['GHI'] = 3 dict_1['JKL'] = 4 print ('Dictionary: ') print (dict_1) print ('key pair 1: ', dict_1['ABC']) print ('key pair 3: ', dict_1['GHI']) print ('key pair 5: ', dict_1['MNO']) 

انتاج:

 Dictionary: defaultdict(, {'ABC': 1, 'DEF': 2, 'GHI': 3, 'JKL': 4}) key pair 1: 1 key pair 3: 3 key pair 5: This key is not present 

العمل الداخلي للتقصير

عندما نستخدم defaultdict، نحصل على متغير نسخة إضافي قابل للكتابة وطريقة واحدة بالإضافة إلى عمليات القاموس القياسية. متغير المثيل القابل للكتابة هو المعلمة default_factory و __مفتقد__ هي الطريقة.

    default_factory:تقوم الدالة default_factory() بإرجاع القيمة الافتراضية التي حددها المستخدم للقاموس المحدد من قبله.

مثال:

 from collections import defaultdict as DD dict_1 = DD(lambda: 'This key is not present') dict_1['ABC'] = 1 dict_1['DEF'] = 2 dict_1['GHI'] = 3 dict_1['JKL'] = 4 print ('Dictionary: ') print (dict_1) print ('key value 1: ', dict_1['ABC']) print ('key value 3: ', dict_1['GHI']) print ('key value 5: ', dict_1['MNO']) 

انتاج:

 Dictionary: defaultdict(<function at 0x0000019efc4b58b0>, {&apos;ABC&apos;: 1, &apos;DEF&apos;: 2, &apos;GHI&apos;: 3, &apos;JKL&apos;: 4}) key value 1: 1 key value 3: 3 key value 5: This key is not present </function>
    __مفتقد__():يتم استخدام الدالة __missing__() لتوفير القيمة الافتراضية للقاموس. تأخذ الدالة __missing__() default_factory كوسيطة، وإذا تم تعيين الوسيطة على لا شيء، فسيتم ظهور خطأ KeyError؛ وإلا فإنه سيوفر قيمة افتراضية للمفتاح المحدد. يتم استدعاء هذه الطريقة بشكل أساسي بواسطة __تحصل على البند__() وظيفة فئة dict عندما لا يتم العثور على المفتاح المطلوب. تقوم الدالة __getitem__() برفع أو إرجاع القيمة الموجودة في الدالة __missing__().

مثال:

 from collections import defaultdict as DD dict_1 = DD(lambda: &apos;This key is not present&apos;) dict_1[&apos;ABC&apos;] = 1 dict_1[&apos;DEF&apos;] = 2 dict_1[&apos;GHI&apos;] = 3 dict_1[&apos;JKL&apos;] = 4 print (&apos;Dictionary: &apos;) print (dict_1) print (&apos;key value 1: &apos;, dict_1.__missing__(&apos;ABC&apos;)) print (&apos;key value 4: &apos;, dict_1[&apos;JKL&apos;]) print (&apos;key value 5: &apos;, dict_1.__missing__(&apos;MNO&apos;)) 

انتاج:

 Dictionary: defaultdict(<function at 0x0000019efc4b5670>, {&apos;ABC&apos;: 1, &apos;DEF&apos;: 2, &apos;GHI&apos;: 3, &apos;JKL&apos;: 4}) key value 1: This key is not present key value 4: 4 key value 5: This key is not present </function>

كيفية استخدام 'القائمة' كـ default_factory

يمكننا تمرير فئة القائمة كوسيطة default_factory، وسوف تقوم بإنشاء الافتراضي مع القيم التي تم تعيينها في تنسيق القائمة.

مثال:

 from collections import defaultdict as DD # Defining a dictionary dict_1 = DD(list) for k in range(7, 12): dict_1[k].append(k) print (&apos;Dictionary with values as list:&apos;) print (dict_1) 

انتاج:

 Dictionary with values as list: defaultdict(, {7: [7], 8: [8], 9: [9], 10: [10], 11: [11]}) 

كيفية استخدام 'int' كـ default_factory

يمكننا تمرير فئة int كوسيطة default_factory، وسوف تقوم بإنشاء الافتراضي مع تعيين القيمة الافتراضية على صفر.

مثال:

 from collections import defaultdict as DD # Defining the dict dict_1 = DD(int) J = [1, 2, 3, 4, 2, 4, 1, 2] # Now, we will iterate through the list &apos;J&apos; # for keeping the count for k in J: # As, The default value is 0 # so we do not need to # enter the key first dict_1[k] += 1 print(dict_1) 

انتاج:

 defaultdict(, {1: 2, 2: 3, 3: 1, 4: 2}) 

خاتمة

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