מבוא
מילון ב-Python הוא אוסף של פריטים המאחסן נתונים כצמדי מפתח-ערך. ב-Python 3.7 ובגירסאות מאוחרות יותר, המילונים ממוינים לפי סדר הכנסת הפריט. בגרסאות קודמות, הם לא היו מסודרים.
במאמר זה, נסקור כיצד נוכל למיין מילון על בסיס הערכים שהוא מכיל.
מיון מילון באמצעות א ל לולאה
נוכל למיין מילון בעזרת א for
לוּלָאָה. ראשית, אנו משתמשים ב- sorted()
פונקציה לסדר את ערכי המילון. לאחר מכן אנו עוברים בלולאה בין הערכים הממוינים, ומוצאים את המפתחות עבור כל ערך. אנו מוסיפים את צמדי המפתח-ערך האלה בסדר ממוין למילון חדש.
הערה: המיון אינו מאפשר לך לסדר מחדש את המילון במקום. אנחנו כותבים את הזוגות המסודרים במילון חדש לגמרי וריק.
dict1 = {1: 1, 2: 9, 3: 4}
sorted_values = sorted(dict1.values())
sorted_dict = {}
for i in sorted_values:
for k in dict1.keys():
if dict1[k] == i:
sorted_dict[k] = dict1[k]
print(sorted_dict)
אם תפעיל את זה עם המתורגמן של Python תראה:
{1: 1, 3: 4, 2: 9}
כעת, לאחר שראינו כיצד למיין עם לולאות, בואו נסתכל על חלופה פופולרית יותר המשתמשת ב- sorted()
פונקציה.
מיון מילון באמצעות ה מְמוּיָן() פונקציה
השתמשנו בעבר ב- sorted()
פונקציה כדי למיין את הערכים של מערך. בעת מיון מילון, נוכל להעביר טיעון נוסף ל- sorted()
לתפקד כך: sorted(dict1, key=dict1.get)
.
כאן, key
היא פונקציה שנקראת על כל אלמנט לפני השוואת הערכים למיון. ה get()
שיטה על אובייקטי מילון מחזירה את הערך של מפתח של מילון.
אל האני sorted(dict1, key=dict1.get)
expression יחזיר את רשימת המפתחות שהערכים שלהם ממוינים לפי הסדר. משם נוכל ליצור מילון חדש וממוין:
dict1 = {1: 1, 2: 9, 3: 4}
sorted_dict = {}
sorted_keys = sorted(dict1, key=dict1.get)
for w in sorted_keys:
sorted_dict[w] = dict1[w]
print(sorted_dict)
משתמש ב sorted()
הפונקציה הפחיתה את כמות הקוד שהיינו צריכים לכתוב בעת השימוש for
לולאות. עם זאת, אנו יכולים לשלב עוד יותר את sorted()
לתפקד עם itemgetter()
פונקציה לפתרון תמציתי יותר למיון מילונים לפי ערכים.
מיון מילון באמצעות ה מפעיל מודול ו itemgetter()
אל האני operator
מודול כולל את itemgetter()
פוּנקצִיָה. פונקציה זו מחזירה אובייקט הניתן להתקשרות המחזיר פריט מאובייקט.
לדוגמה, בואו נשתמש itemgetter()
כדי ליצור אובייקט הניתן להתקשרות שמחזיר את הערך של כל מילון עם מפתח שהוא 2
:
import operator
dict1 = {1: 1, 2: 9}
get_item_with_key_2 = operator.itemgetter(2)
print(get_item_with_key_2(dict1))
לכל מילון יש גישה ל- items()
שיטה. פונקציה זו מחזירה את צמדי המפתח-ערך של מילון כרשימה של tuples. אנו יכולים למיין את רשימת הטפולים באמצעות ה itemgetter()
פונקציה למשוך את הערך השני של ה-tuple כלומר הערך של המפתחות במילון.
לאחר מיון, נוכל ליצור מילון המבוסס על הערכים הללו:
import operator
dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=operator.itemgetter(1))
print(sorted_tuples)
sorted_dict = {k: v for k, v in sorted_tuples}
print(sorted_dict)
עם הרבה פחות מאמץ, יש לנו מילון ממוין לפי ערכים!
כמו key
ארגומנט מקבל כל פונקציה, אנו יכולים להשתמש בפונקציות למבדה כדי להחזיר ערכי מילון כדי שניתן יהיה למיין אותם. בוא נראה איך.
מיון מילון באמצעות פונקציית למבדה
פונקציות Lambda הן פונקציות אנונימיות, או חסרות שם, ב- Python. אנו יכולים להשתמש בפונקציות למבדה כדי לקבל את הערך של פריט במילון מבלי לייבא את operator
מודול עבור itemgetter()
. אם תרצה ללמוד עוד על למבדות, תוכל לקרוא עליהן במדריך שלנו ל פונקציות למבדה ב-Python.
עיין במדריך המעשי והמעשי שלנו ללימוד Git, עם שיטות עבודה מומלצות, סטנדרטים מקובלים בתעשייה ודף רמאות כלול. תפסיק לגוגל פקודות Git ולמעשה ללמוד זה!
בואו נמיין מילון לפי ערכים באמצעות פונקציית למבדה ב- key
טיעון של sorted()
:
dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=lambda item: item[1])
print(sorted_tuples)
sorted_dict = {k: v for k, v in sorted_tuples}
print(sorted_dict)
שימו לב שהשיטות שדנו בהן עד כה עובדות רק עם Python 3.7 ואילך. בוא נראה מה אנחנו יכולים לעשות עבור גרסאות קודמות של Python.
החזרת מילון חדש עם ערכים ממוינים
לאחר מיון מילון לפי ערכים, כדי לשמור מילון ממוין בגרסאות Python לפני 3.7, עליך להשתמש ב- OrderedDict
– זמין ב collections
מודול. אובייקטים אלו הם מילונים השומרים על סדר ההכנסה.
הנה דוגמה למיון ושימוש OrderedDict
:
import operator
from collections import OrderedDict
dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=operator.itemgetter(1))
print(sorted_tuples)
sorted_dict = OrderedDict()
for k, v in sorted_tuples:
sorted_dict[k] = v
print(sorted_dict)
סיכום
מדריך זה הראה כיצד ניתן למיין מילון על סמך ערכיו. תחילה מיינו מילון באמצעות שניים עבור לולאות. לאחר מכן שיפרנו את המיון שלנו על ידי שימוש ב- sorted()
פוּנקצִיָה. ראינו גם את itemgetter()
פונקציה מתוך operator
מודול יכול להפוך את הפתרון שלנו לתמציתי יותר.
לבסוף, התאמנו את הפתרון שלנו לעבודה על גרסאות Python הנמוכות מ-3.7.
וריאציות של sorted()
function הם הפופולריים והאמינים ביותר למיין מילון לפי ערכים.