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

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

Όταν εργάζεστε με ένα λεξικό στην Python, υπάρχουν φορές που θα χρειαστεί να ταξινομήσετε τα περιεχόμενά του—κατά κλειδί ή κατά τιμή. Καθώς ένα λεξικό Python είναι μια αντιστοίχιση κλειδιού-τιμής, θα δημιουργήσετε ένα νέο λεξικό που θα έχει τα κλειδιά ή τις τιμές ταξινομημένα ανάλογα με τις ανάγκες.

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

Python Dictionary Basics, Revisited

Τι είναι το λεξικό Python;

Το λεξικό είναι μια ενσωματωμένη δομή δεδομένων στην Python. Αποθηκεύει στοιχεία ως ζεύγη κλειδιού-τιμής. Μπορείτε να χρησιμοποιήσετε τα πλήκτρα για να αναζητήσετε τις αντίστοιχες τιμές. Καθώς τα πλήκτρα προσδιορίζουν μοναδικά τις τιμές, δεν θα πρέπει να υπάρχει επανάληψη των κλειδιών.

py_dict = {"Python":"cool!","Learn":True}
py_dict["Python"]
# Output: cool!

py_dict["Learn"]
# Output: True

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

Ταξινόμηση αντικειμένων σε λεξικό

Σε παλαιότερες εκδόσεις της Python, έπρεπε να χρησιμοποιήσετε ένα OrderedDict για να διατηρήσετε τη σειρά των κλειδιών. Ωστόσο, από την Python 3.7, μπορείτε να έχετε πρόσβαση στα στοιχεία με την ίδια σειρά με την οποία τα προσθέτετε στο λεξικό.

Τώρα που μάθατε τα βασικά των λεξικών Python, ας μάθουμε πώς να δημιουργείτε ταξινομημένα αντίγραφα του λεξικού.

⚙️ Σημείωση: Πρέπει να έχετε Python 3.7 ή νεότερη έκδοση για να λειτουργήσει ο κώδικας σε αυτό το σεμινάριο όπως αναμένεται. Μπορείτε να κατεβάσετε το τελευταία έκδοση της Pythonή εκτελέστε τα παραδείγματα στο grtechpc.org Online Python Editor.

  Τι σημαίνει «ITT» και πώς το χρησιμοποιείτε;

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

Δείτε την παρακάτω εικόνα του μενού γλυκών σε ένα καφέ. Υπάρχουν δύο στήλες που αντιστοιχούν στα είδη του μενού και τις αντίστοιχες τιμές τους.

Μπορείτε να το αναπαραστήσετε με τη μορφή ενός λεξικού Python συλλέγοντας τα ονόματα των στοιχείων ως κλειδιά και τις τιμές τους ως τιμές.

Ας προχωρήσουμε και να δημιουργήσουμε τα επιδόρπια του λεξικού, όπως φαίνεται παρακάτω.

desserts = {
    "Ice cream":10,
    "Brownies":12,
    "Cheesecake":3,
    "Swiss roll":5,
    "Cookies":4,
    "Cup cake":2
}

Στη συνέχεια, ας δημιουργήσουμε ένα λεξικό sorted_sserts, όπου τα επιδόρπια είναι ταξινομημένα με αλφαβητική σειρά. Στο αρχικό λεξικό επιδόρπια, τα ονόματα των επιδορπίων είναι τα κλειδιά. Επομένως, θα πρέπει να ταξινομήσετε αυτά τα κλειδιά με αλφαβητική σειρά για να δημιουργήσετε ένα νέο λεξικό.

Πώς να αποκτήσετε πρόσβαση στα κλειδιά ενός λεξικού Python

Για να γίνει αυτό, θα πάρουμε πρώτα τα κλειδιά του λεξικού και μετά θα τα ταξινομήσουμε με αλφαβητική σειρά.

Στην Python, μπορείτε να χρησιμοποιήσετε την ενσωματωμένη μέθοδο λεξικού .keys() για να λάβετε μια λίστα με όλα τα κλειδιά του λεξικού.

Ας καλέσουμε τη μέθοδο .keys() στο λεξικό επιδορπίων για να ανακτήσουμε τα κλειδιά, όπως φαίνεται παρακάτω.

keys = desserts.keys()
print(keys)

#Output
['Ice cream', 'Brownies', 'Cheesecake', 'Swiss roll', 'Cookies', 
'Cup cake']

Η κλήση της ενσωματωμένης συνάρτησης sorted() της Python με μια λίστα καθώς το όρισμα επιστρέφει μια νέα ταξινομημένη λίστα.

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

sorted_keys = sorted(keys)
print(sorted_keys)

# Output
['Brownies', 'Cheesecake', 'Cookies', 'Cup cake', 'Ice cream', 'Swiss roll']

Τώρα που έχουμε τα κλειδιά ταξινομημένα με αλφαβητική σειρά, μπορούμε να αναζητήσουμε τις τιμές που αντιστοιχούν στα κλειδιά στα sorted_keys από το λεξικό επιδορπίων, όπως φαίνεται παρακάτω.

sorted_desserts = {}
for key in sorted_keys:
  sorted_desserts[key] = desserts[key]

print(sorted_desserts)

# Output
{'Brownies': 12, 'Cheesecake': 3, 'Cookies': 4, 'Cup cake': 2, 
'Ice cream': 10, 'Swiss roll': 5}

Ας επεκταθούμε στο παραπάνω μπλοκ κώδικα:

  • Αρχικοποιήστε τα sorted_deserts ώστε να είναι ένα κενό λεξικό Python.
  • Κάντε βρόχο στη λίστα κλειδιών sorted_keys.
  • Για κάθε κλειδί στα sorted_keys, προσθέστε μια καταχώρηση στο sorted_sserts αναζητώντας την αντίστοιχη τιμή στο λεξικό επιδορπίων.

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

  Πώς να κάνετε ροή "Frasier" χωρίς καλώδιο

Κατανόηση λεξικού σε Python

Η Python υποστηρίζει τη χρήση της κατανόησης λεξικού, παρόμοια με την κατανόηση λιστών. Η κατανόηση λεξικού σάς επιτρέπει να δημιουργήσετε ένα νέο λεξικό Python με μία μόνο γραμμή κώδικα.

▶️ Εδώ είναι η γενική κατασκευή για τη χρήση της κατανόησης λεξικού στην Python.

# 1. when you have both keys and values in two lists: list1, list2
new_dict = {key:value for key,value in zip(list1,list2)}

# 2. when you have the keys, and can look up the values
new_dict = {key:value for key in <iterable>}

Ας χρησιμοποιήσουμε τη δεύτερη κατασκευή στο παραπάνω κελί: new_dict = {key:value for key στο } για να δημιουργήσουμε ένα λεξικό sorted_deserts.

Σε αυτό το παράδειγμα:

  • iterable: η λίστα sorted_keys
  • κλειδί: το κλειδί στο οποίο έχουμε πρόσβαση κάνοντας loop στα sorted_keys
  • τιμή: αναζητήστε την τιμή που αντιστοιχεί στο κλειδί από το λεξικό επιδόρπια, επιδόρπια[key]

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

sorted_desserts = {key:desserts[key] for key in sorted_keys}
print(sorted_desserts)

{'Brownies': 12, 'Cheesecake': 3, 'Cookies': 4, 'Cup cake': 2, 
'Ice cream': 10, 'Swiss roll': 5}

Από την παραπάνω έξοδο, τα επιδόρπια ταξινομούνται με αλφαβητική σειρά στο λεξικό sorted_sserts.

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

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

Στο λεξικό επιδορπίων, οι τιμές αντιστοιχούν στις τιμές των επιδορπίων. Μπορεί να θέλετε να ταξινομήσετε το λεξικό κατά τιμές, είτε με αύξουσα είτε με φθίνουσα σειρά.

▶️ Μπορείτε να χρησιμοποιήσετε την ενσωματωμένη μέθοδο λεξικού .items() για να λάβετε όλα τα ζεύγη κλειδιών-τιμών. Κάθε πλειάδα είναι ένα ζεύγος κλειδιού-τιμής.

desserts.items()

dict_items([('Ice cream', 10), ('Brownies', 12), ('Cheesecake', 3), 
('Swiss roll', 5), ('Cookies', 4), ('Cup cake', 2)])

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

dict_items = desserts.items()
for item in dict_items:
  print(f"key:{item[0]},value:{item[1]}")

# Output
key:Ice cream,value:10
key:Brownies,value:12
key:Cheesecake,value:3
key:Swiss roll,value:5
key:Cookies,value:4
key:Cup cake,value:2

Καθώς θα θέλαμε να ταξινομήσουμε κατά τιμές, θα χρησιμοποιήσουμε την παραπάνω μέθοδο για να λάβουμε την τιμή στο δείκτη 1 στο ζεύγος κλειδιού-τιμής.

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

Αυτή τη φορά, θα χρησιμοποιήσουμε τη συνάρτηση sorted() μαζί με την προαιρετική παράμετρο κλειδιού. κλειδί μπορεί να είναι οποιαδήποτε συνάρτηση Python, μια ενσωματωμένη συνάρτηση, μια συνάρτηση που ορίζεται από το χρήστη ή ακόμα και ένα συνάρτηση λάμδα.

  Πώς να απενεργοποιήσετε το Multitasking σε ένα iPad

Σημείωση: lambda args: έκφραση είναι η σύνταξη για τον ορισμό συναρτήσεων λάμδα στην Python.

Σε αυτό το παράδειγμα ταξινόμησης επιδορπίων ανά τιμή, έχουμε πρόσβαση σε στοιχεία λεξικού (ζεύγη κλειδιού-τιμής). Θα ορίσουμε key = lambda item:item[1] όπως θα θέλαμε να ταξινομήσουμε με βάση την τιμή (τιμή).

Καθώς η συνάρτηση sorted() επιστρέφει μια λίστα από προεπιλογή, θα πρέπει να τη μεταφέρετε ρητά σε ένα dict, όπως φαίνεται παρακάτω.

sorted_desserts = dict(sorted(desserts.items(), key=lambda item:item[1]))
print(sorted_desserts)

{'Cup cake': 2, 'Cheesecake': 3, 'Cookies': 4, 'Swiss roll': 5, 
'Ice cream': 10, 'Brownies': 12}

Μπορείτε επίσης να ξαναγράψετε χρησιμοποιώντας κατανόηση λεξικούόπως συζητήθηκε προηγουμένως.

sorted_desserts = {key:value for key, value in sorted(desserts.items(), 
key=lambda item:item[1])}

print(sorted_desserts)

# Output
{'Cup cake': 2, 'Cheesecake': 3, 'Cookies': 4, 'Swiss roll': 5, 
'Ice cream': 10, 'Brownies': 12}

Στα sorted_sserts, το Cup Cake με τιμή 2 $ είναι το πρώτο προϊόν και τα Brownies με τιμή 12 $ είναι το τελευταίο.

Πώς να ταξινομήσετε τις τιμές ενός λεξικού Python με φθίνουσα σειρά

Εάν θέλετε να ταξινομήσετε τις τιμές με φθίνουσα σειρά, μπορείτε να ορίσετε την προαιρετική αντίστροφη παράμετρο σε True, όπως εξηγείται παρακάτω.

sorted_desserts = dict(sorted(desserts.items(), key=lambda item:item[1], 
reverse=True))
print(sorted_desserts)

# Output
{'Brownies': 12, 'Ice cream': 10, 'Swiss roll': 5, 'Cookies': 4, 
'Cheesecake': 3, 'Cup cake': 2}

Τώρα, τα sorted_desserts ταξινομήθηκαν με τη φθίνουσα σειρά των τιμών, ξεκινώντας με το πιο ακριβό επιδόρπιο Brownies που κοστίζει $12.

Τελειώνοντας 👩🏽‍💻

Ας συνοψίσουμε γρήγορα όλα όσα μάθαμε σε αυτό το σεμινάριο.

  • Ένα λεξικό Python αποθηκεύει δεδομένα σε ζεύγη κλειδιών-τιμών. τα κλειδιά πρέπει να είναι όλα μοναδικά.
  • Κατά τη διαδικασία ταξινόμησης ενός λεξικού κατά κλειδί ή τιμή, δημιουργούμε ένα νέο λεξικό που ταξινομείται ανάλογα με τις ανάγκες.
  • Μπορείτε να χρησιμοποιήσετε τις ενσωματωμένες μεθόδους λεξικού, .keys() και .items() για να ανακτήσετε όλα τα κλειδιά και τα ζεύγη κλειδιού-τιμής, αντίστοιχα.
  • Μπορείτε να χρησιμοποιήσετε τη συνάρτηση sorted() μαζί με το πλήκτρο προαιρετικών παραμέτρων και να κάνετε αντιστροφή για να επιτύχετε την επιθυμητή ταξινόμηση.

Τώρα που μάθατε πώς να ταξινομείτε ένα λεξικό Python, μάθετε να ταξινομείτε λίστες Python. Καλή κωδικοποίηση!🎉