שאלה לגבי פונקציית get

היי לכולם
במהלך פתירת תרגיל מלחמה וזהו שוטטתי באינטרנט וראיתי שימוש במתודת get. בדוגמאות רבות כדי להגיע למיקומים של ערכים מסויימים במילון
עברתי על המחברת אך לא ככ הבנתי מה קורה כאשר משאירים את הget ללא שום ארגומנט , אילו פעולות מתבצעות במצב כזה של - dict.get
תודה :slight_smile:

אם הכוונה get() אשמח אם תוכלי להראות דוגמא. אם הכוונה היא get(key) מבלי לתת ערך דיפולטי, אז הערך הדיפולטי המוחזר אם המפתח אינו במילון יהיה None - שזה לעיתים עדיף משגיאה שמסיימת את ריצת הקוד.

את במקרה מתכוונת כאשר משתמשים בפונקציה sorted עם key=dict.get ?

לייק 1

אני אשמח לדעת מה קורה במקרה זה :innocent:

בדיוק :slight_smile:

למעשה מה שמשנה פה זה ה-key.
אם תנסי לעשות sorted למילון הוא יחזיר רשימה “ממויינת” לפי המפתחות.
אם אני אשנה את ה-key כך שיהיה dict.get (ללא ערך) הוא יחזיר לי רשימה של המפתחות ממויינים לפי הערכים.
ה-get לא מקבל ערכים כמו בהסבר במחברת על key בפונקציה sorted - ה-key הוא פונקציה שלפיה המיון יתבצע.
ראי שימוש בדוגמה במחברת 5 על key=len - פונקציה שמקבלת כפרמטר iterable ומחזירה את האורך שלו.
במקרה הזה הפונקציה get אמורה לקבל מפתח ולהחזיר את הערך שלו.

2 לייקים

תודה לשניכם !
מותר להשתמש בget כפי שהסביר/ה אור בצורה הזאת ?

אין סיבה שלא :smiley:

2 לייקים

תודה על ההסבר!
רק עוד דבר כדי להבין עד הסוף ,
הבנתי מן הסתם שבתוך sorted , הkey הוא פונקציה שעל פיה מתבצע הסידור.
השאלה שלי היא האם get במקרה כזה לא מקבלת ארגומנט ופשוט מחזירה את כל הערכים של כל המפתחות?

היא מקבלת ארגומנט מאחורי הקלעים. עבור כל מפתח שעליו רצים היא בודקת מה הערך שלו לפי get, כלומר שולחת אותו ל-get ומקבלת תשובה.

לייק 1

לדעתי זאת ממש חשיפה של קוד ופיתרון לתרגיל וכדאי לא לפרסם את זה.

כשאני מנסה לסדר מילון עם sorted הוא מוחק לי את הערכים ושומר רק את המפתחות של המילון וכשאני משתמש ב sorted(key=dict.get) אני מקבל את השגיאה:
TypeError: descriptor ‘get’ requires a ‘dict’ object but received a ‘str’

האמת שאני תקוע כבר יום שלם על הדבר הזה ויכול להיות שצריך להשתמש כאן בunpacking ולא הבנתי איך… אם מישהו יוכל לתת לי כיוון זה יהיה נחמד :slight_smile:

השורה המלאה היא
(mydict = sorted(mydict, key =dict.get
ו mydict הוא כמובן מילון… :frowning:

ובכן, בשורה שרשמת כאן, האם sorted יודעת מי זה dict?
שים לב בזהירות שהמילון שלך הוא mydict…

צודק! איזה טעות מטומטמת…
לצערי אני עדיין לא מבין את המבנה של הקוד הזה… כאילו בתוך הקי מזינים את המילון נקודה גט ואז לתוכו מכניסים את הפונקציה שממיינת את הערכים? (למשל min/ max)?

הניסוח שלך לא ברור לי, אבל בעיקרון sorted מקבלת אובייקט שהוא iterable ואז מפעילה מיון על איברי אותו אובייקט בסדר עולה (מקטן עד גדול), כאשר פונ’ שאתה מוסר לה כארגומנט לפרמטר key קובעת כיצד לבצע אותו סידור מקטן לגדול.
למשל, אם היית מבצע את sorted על רשימה שכל איבר בה הוא מחרוזת, עם key = len, אז המיון היה מסדר לך את הרשימה כך שבמקום ה-0 הייתה מופיעה המחרוזת הכי קצרה, ובמקום האחרון (1-) תופיע המחרוזת הכי ארוכה ברשימה.

במקרה של המילון, באופן אנלוגי sorted ממיינת את המילון לפי תוצאת הפעלת פונ’ get על כל איבר במילון.

לייק 1

תודה :star_struck: :star_struck: :star_struck: