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

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

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

 my_dict = (1: 'apple', 2: 'ball') 

Για να μάθετε περισσότερα σχετικά με αυτά επισκεφθείτε: Python Dictionary

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

Η κατανόηση λεξικού είναι ένας κομψός και περιεκτικός τρόπος για τη δημιουργία λεξικών.

Παράδειγμα 1: Κατανόηση λεξικού

Εξετάστε τον ακόλουθο κώδικα:

 square_dict = dict() for num in range(1, 11): square_dict(num) = num*num print(square_dict) 

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

 # dictionary comprehension example square_dict = (num: num*num for num in range(1, 11)) print(square_dict) 

Το αποτέλεσμα και των δύο προγραμμάτων θα είναι το ίδιο.

 (1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100)

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

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

Χρήση κατανόησης λεξικού

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

Η ελάχιστη σύνταξη για κατανόηση λεξικού είναι:

 λεξικό = (κλειδί: τιμή για vars με δυνατότητα επανάληψης) 

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

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

Παράδειγμα 3: Πώς να χρησιμοποιήσετε την κατανόηση λεξικού

 #item price in dollars old_price = ('milk': 1.02, 'coffee': 2.5, 'bread': 2.5) dollar_to_pound = 0.76 new_price = (item: value*dollar_to_pound for (item, value) in old_price.items()) print(new_price) 

Παραγωγή

 («γάλα»: 0,7752, «καφές»: 1,9, «ψωμί»: 1,9) 

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

Προϋποθέσεις στην κατανόηση λεξικών

Μπορούμε να προσαρμόσουμε περαιτέρω την κατανόηση του λεξικού προσθέτοντας όρους σε αυτό. Ας δούμε ένα παράδειγμα.

Παράδειγμα 4: Εάν η υπό όρους κατανόηση λεξικού

 original_dict = ('jack': 38, 'michael': 48, 'guido': 57, 'john': 33) even_dict = (k: v for (k, v) in original_dict.items() if v % 2 == 0) print(even_dict) 

Παραγωγή

 ('jack': 38, 'michael': 48) 

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

Παράδειγμα 5: Πολλαπλασιασμός εάν η υπό όρους κατανόηση λεξικού

 original_dict = ('jack': 38, 'michael': 48, 'guido': 57, 'john': 33) new_dict = (k: v for (k, v) in original_dict.items() if v % 2 != 0 if v < 40) print(new_dict) 

Παραγωγή

 («John»: 33) 

Σε αυτήν την περίπτωση, μόνο τα στοιχεία με περιττή τιμή μικρότερη από 40 έχουν προστεθεί στο νέο λεξικό.

Είναι λόγω των πολλαπλών ifρητρών στην κατανόηση του λεξικού. Είναι ισοδύναμα με τη andλειτουργία όπου και οι δύο συνθήκες πρέπει να ισχύουν.

Παράδειγμα 6: Κατανόηση λεξικού υπό όρους

 original_dict = ('jack': 38, 'michael': 48, 'guido': 57, 'john': 33) new_dict_1 = (k: ('old' if v> 40 else 'young') for (k, v) in original_dict.items()) print(new_dict_1) 

Παραγωγή

 ('jack': 'young', 'michael': 'old', 'guideo': 'old', 'john': 'young') 

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

Τα αντικείμενα με τιμή 40 και άνω έχουν την τιμή «παλιά», ενώ άλλα έχουν την τιμή «μικρά».

Κατανόηση ένθετου λεξικού

Μπορούμε να προσθέσουμε τα λεξικά κατανόησης στο λεξικό για να δημιουργήσουμε ένθετα λεξικά. Ας δούμε ένα παράδειγμα.

Παράδειγμα 7: Ένθετο λεξικό με δύο διακρίσεις λεξικών

 dictionary = ( k1: (k2: k1 * k2 for k2 in range(1, 6)) for k1 in range(2, 5) ) print(dictionary) 

Παραγωγή

 (2: (1: 2, 2: 4, 3: 6, 4: 8, 5: 10), 3: (1: 3, 2: 6, 3: 9, 4: 12, 5: 15), 4: (1: 4, 2: 8, 3: 12, 4: 16, 5: 20)) 

As you can see, we have constructed a multiplication table in a nested dictionary, for numbers from 2 to 4.

Whenever nested dictionary comprehension is used, Python first starts from the outer loop and then goes to the inner one.

So, the above code would be equivalent to:

 dictionary = dict() for k1 in range(11, 16): dictionary(k1) = (k2: k1*k2 for k2 in range(1, 6)) print(dictionary) 

It can further be unfolded:

 dictionary = dict() for k1 in range(11, 16): dictionary(k1) = dict() for k2 in range(1, 6): dictionary(k1)(k2) = k1*k2 print(dictionary) 

All these three programs give us the same output.

Advantages of Using Dictionary Comprehension

As we can see, dictionary comprehension shortens the process of dictionary initialization by a lot. It makes the code more pythonic.

Using dictionary comprehension in our code can shorten the lines of code while keeping the logic intact.

Warnings on Using Dictionary Comprehension

Παρόλο που οι κατανόηση του λεξικού είναι ιδανικές για τη σύνταξη κομψού κώδικα που είναι εύκολο να διαβαστεί, δεν είναι πάντα η σωστή επιλογή.

Πρέπει να είμαστε προσεκτικοί όταν τα χρησιμοποιούμε ως:

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

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

ενδιαφέροντα άρθρα...