logo

ברירת מחדל בפייתון

המילון הוא אוסף לא מסודר של ערכי נתונים ב-Python המשמש לאחסון ערכי נתונים כגון מפות. המילון מכיל צמדי מפתח-ערך במקום להחזיק ערך בודד כאלמנט כמו סוגי נתונים אחרים. המפתח המיושם במילון חייב להיות ייחודי ובלתי ניתן לשינוי. כלומר, tuple 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]) 

תְפוּקָה:

חיבורים ב-java
 Dictionary: {1: 'A', 2: 'B', 3: 'C', 4: 'D'} key pair 1: A key pair 3: C 

אבל אם ננסה להדפיס את ערך המפתח החמישי, נקבל את השגיאה בגלל 'Dict_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 

בכל פעם שה keyError מועלה, זה עלול להפוך לבעיה עבור המשתמשים. נוכל להתגבר על שגיאה זו על ידי שימוש במילון אחר של Python, שהוא כמו מיכל הידוע בשם ברירת מחדל . המשתמשים יכולים למצוא את המילון הזה בתוך 'אוספים' מודול.

ברירת מחדל

ברירת המחדל היא מילון של Python, שהוא כמו מיכל קיים בתוך מודול 'אוספים'. זוהי תת-מחלקה של מחלקת המילון המשמשת להחזרת האובייקט דמוי המילון. גם ברירת המחדל וגם למילון יש את אותה פונקציונליות, למעט 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 כארגומנט, ואם הארגומנט מוגדר ל-None, KeyError תעלה; אחרת, הוא יספק ערך ברירת מחדל עבור המפתח הנתון. שיטה זו נקראת בעצם על ידי ה __getitem__() פונקציה של מחלקת 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}) 

סיכום

במדריך זה, דנו ב-defaultdict ב-Python וכיצד נוכל לבצע פעולות שונות ב-defaultdict באמצעות הפרמטר default_factory.

בדיקת ביצועים