כיצד למיין מילון לפי ערך ב- Python

מבוא

מילון ב-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 הם הפופולריים והאמינים ביותר למיין מילון לפי ערכים.

בול זמן:

עוד מ Stackabuse