Πώς να ταξινομήσετε ένα λεξικό κατά τιμή στην Python

Εισαγωγή

Ένα λεξικό στην Python είναι μια συλλογή στοιχείων που αποθηκεύει δεδομένα ως ζεύγη κλειδιού-τιμής. Στην Python 3.7 και σε νεότερες εκδόσεις, τα λεξικά ταξινομούνται κατά σειρά εισαγωγής στοιχείων. Σε προηγούμενες εκδόσεις, δεν είχαν παραγγελθεί.

Σε αυτό το άρθρο, θα ρίξουμε μια ματιά στο πώς μπορούμε να ταξινομήσουμε ένα λεξικό με βάση τις τιμές που περιέχει.

Ταξινόμηση λεξικού με χρήση α for Βρόχος

Μπορούμε να ταξινομήσουμε ένα λεξικό με τη βοήθεια του α 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) έκφραση θα επιστρέψει τη λίστα των κλειδιών των οποίων οι τιμές έχουν ταξινομηθεί με τη σειρά. Από εκεί, μπορούμε να δημιουργήσουμε ένα νέο, ταξινομημένο λεξικό:

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() μέθοδος. Αυτή η συνάρτηση επιστρέφει τα ζεύγη κλειδιού-τιμής ενός λεξικού ως λίστα πλειάδων. Μπορούμε να ταξινομήσουμε τη λίστα των πλειάδων χρησιμοποιώντας το itemgetter() λειτουργία για να τραβήξετε τη δεύτερη τιμή της πλειάδας, δηλαδή την τιμή των πλήκτρων στο λεξικό.

Αφού ταξινομηθεί, μπορούμε να δημιουργήσουμε ένα λεξικό με βάση αυτές τις τιμές:

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 Το όρισμα δέχεται οποιαδήποτε συνάρτηση, μπορούμε να χρησιμοποιήσουμε συναρτήσεις λάμδα για να επιστρέψουμε τιμές λεξικού ώστε να μπορούν να ταξινομηθούν. Ας δούμε πώς.

Ταξινόμηση λεξικού με χρήση συνάρτησης λάμδα

Οι συναρτήσεις λάμδα είναι ανώνυμες ή ανώνυμες συναρτήσεις στην Python. Μπορούμε να χρησιμοποιήσουμε συναρτήσεις λάμδα για να λάβουμε την τιμή ενός στοιχείου λεξικού χωρίς να χρειάζεται να το εισαγάγουμε operator ενότητα για itemgetter(). Εάν θέλετε να μάθετε περισσότερα για τα λάμδα, μπορείτε να διαβάσετε για αυτά στον οδηγό μας Λειτουργίες λάμδα στην Python.

Ρίξτε μια ματιά στον πρακτικό μας οδηγό για την εκμάθηση του Git, με βέλτιστες πρακτικές, πρότυπα αποδεκτά από τον κλάδο και συμπεριλαμβανόμενο φύλλο εξαπάτησης. Σταματήστε τις εντολές του Git στο Google και πραγματικά μαθαίνουν το!

Ας ταξινομήσουμε ένα λεξικό κατά τιμές χρησιμοποιώντας μια συνάρτηση λάμδα στο 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)  

Συμπέρασμα

Αυτό το σεμινάριο έδειξε πώς μπορεί να ταξινομηθεί ένα λεξικό με βάση τις τιμές του. Αρχικά ταξινομήσαμε ένα λεξικό χρησιμοποιώντας δύο βρόχους for. Στη συνέχεια βελτιώσαμε την ταξινόμηση μας χρησιμοποιώντας το sorted() λειτουργία. Έχουμε δει επίσης το itemgetter() λειτουργία από το operator Η ενότητα μπορεί να κάνει τη λύση μας πιο συνοπτική.

Τέλος, προσαρμόσαμε τη λύση μας ώστε να λειτουργεί σε εκδόσεις Python χαμηλότερες από 3.7.

Παραλλαγές του sorted() Η συνάρτηση είναι η πιο δημοφιλής και αξιόπιστη για την ταξινόμηση ενός λεξικού κατά τιμές.

Σφραγίδα ώρας:

Περισσότερα από Stackabuse