PYTHON ΜΑΘΗΜΑ 16 – Dictionaries

 

Δωρεάν Μαθήματα Python



INTRODUCTION

Στο σημερινό δωρεάν μάθημα Python, κάνουμε το επόμενο βήμα στα Data Structures και αναλύουμε τα Dictionaries (Λεξικά). Σε αντίθεση με τις απλές λίστες, τα Dictionaries μας προσφέρουν μια πολύ πιο αναλυτική και δομημένη μορφή ομαδοποίησης των δεδομένων μας. Αποτελούν μια κορυφαία επιλογή που μας προσφέρει η Python για να οργανώνουμε την πληροφορία με τρόπο που βγάζει απόλυτο νόημα για τον άνθρωπο.

Ποια είναι η διαφορά μεταξύ List και Dictionary;

Τα Lists, όπως είδαμε στα προηγούμενα μαθήματά μας, είναι συλλογές με αυστηρή σειρά (ordered collections). Κάθε νέο στοιχείο μπαίνει ακριβώς μετά το προηγούμενο, δημιουργώντας μια αλυσίδα. Αυτή ακριβώς η σειρά μάς αναγκάζει να χρησιμοποιούμε έναν αριθμό θέσης (index) για να βρούμε και να διαχειριστούμε τα αποθηκευμένα στοιχεία.

Το Dictionary, από την άλλη πλευρά, δεν λειτουργεί με index, αλλά με τον συνδυασμό Key-Value (Κλειδί - Τιμή). Αν και στις νεότερες εκδόσεις της Python τα λεξικά διατηρούν τη σειρά εισαγωγής των δεδομένων, εμείς δεν ψάχνουμε ποτέ με αριθμούς (π.χ. το "πρώτο" ή το "τρίτο" στοιχείο). Το μόνο που μας ενδιαφέρει είναι να καλέσουμε το σωστό Key, ώστε η Python να μας επιστρέψει το Value που αυτό αντιπροσωπεύει!

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

premier = [‘Arsenal’, ‘Chelsea’, ‘Everton’]

Τι γίνεται, όμως, όταν προσπαθήσουμε να αποθηκεύσουμε σε μια λίστα διαφορετικά είδη πληροφοριών; Σε αυτή την περίπτωση, τα πράγματα μπερδεύονται αρκετά. Κοιτάζοντας τη λίστα, δεν είναι πλέον καθόλου ξεκάθαρο τι ακριβώς αντιπροσωπεύει το κάθε στοιχείο (element), όπως φαίνεται και στο παράδειγμα που ακολουθεί.

employee = [‘Michail’, ‘training’, ‘Kassapoglou’, ‘Jonathan’]

Κοιτάζοντας την παραπάνω λίστα, είναι απόλυτα λογικό να αναρωτιέστε: ποιο είναι το μικρό όνομα του εργαζόμενου; Ποιο είναι το επίθετό του; Ποιος είναι ο manager του; Αυτήν ακριβώς την έλλειψη οργάνωσης και σαφήνειας έρχεται να λύσει με τον καλύτερο τρόπο το Dictionary.

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

Πώς Δημιουργούμε ένα Dictionary;

Για να δημιουργήσουμε ένα Dictionary στην Python, χρησιμοποιούμε τα λεγόμενα curly brackets, δηλαδή τα άγκιστρα { }. Μέσα σε αυτά τα άγκιστρα, τοποθετούμε τα δεδομένα μας οργανωμένα σε ζευγάρια Key-Value (Κλειδί-Τιμή).

Για να αποθηκεύσουμε σωστά μια πληροφορία, χρειαζόμαστε πάντα δύο στοιχεία: το Key (κλειδί), το οποίο λειτουργεί σαν ετικέτα για να βρίσκουμε αυτό που ψάχνουμε, και το Value (τιμή), που είναι το ίδιο το δεδομένο που θέλουμε να κρατήσουμε. Έτσι, όταν στο μέλλον χρειαστούμε το δεδομένο (value), αρκεί απλώς να «φωνάξουμε» το αντίστοιχο κλειδί (key) του! Ας δούμε ένα απλό παράδειγμα ορισμού ενός Dictionary στην πράξη.

app.py

employee = {
    'first_name': 'Michail',
    'last_name': 'Kassapoglou',
    'department': 'Training'
}

print(employee)

Output

Δωρεάν Μαθήματα Python


Αναλύοντας το παραπάνω παράδειγμα, βλέπουμε ότι τα keys (κλειδιά) είναι τα first_name, last_name και department, ενώ τα αντίστοιχα values (τιμές) είναι τα Michail, Kassapoglou και Training. Έτσι, αν θέλουμε να πάρουμε πίσω την τιμή Training, αρκεί να ζητήσουμε από την Python το κλειδί department.

Τι δεδομένα μπορούμε να βάλουμε; Τα keys πρέπει να είναι "αμετάβλητα" δεδομένα, γι' αυτό και χρησιμοποιούμε σχεδόν πάντα Strings ή Numbers. Αντίθετα, στα values έχουμε απόλυτη ελευθερία! Μπορούν να είναι οποιοσδήποτε τύπος δεδομένων (data type), ακόμα και Lists ή άλλα Dictionaries.

Τέλος, η σύνταξη έχει δύο βασικούς κανόνες: ένα άνω-κάτω τελεία (:) χωρίζει το κάθε key από το value του, ενώ το κάθε ζευγάρι στοιχείων χωρίζεται από το επόμενο με ένα κόμμα (,).

Πρόσβαση στα Δεδομένα ενός Dictionary

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

Για να το καταφέρουμε αυτό, γράφουμε το όνομα του Dictionary και, αμέσως μετά, μέσα σε αγκύλες ([ ]), τοποθετούμε το όνομα του κλειδιού (key) που ψάχνουμε.

app.py

employee = {
    'first_name': 'Michail',
    'last_name': 'Kassapoglou',
    'department': 'Training'
}

print(employee['first_name'])
print(f"The employee's first name is {employee['first_name']}")

Output

Δωρεάν Μαθήματα Python


Η Μέθοδος get()

Η Python μάς προσφέρει και έναν δεύτερο τρόπο για να αντλήσουμε την τιμή ενός στοιχείου: τη μέθοδο get(), η οποία είναι ενσωματωμένη στα Dictionaries.

Η μεγάλη της διαφορά (και το πλεονέκτημά της) σε σχέση με τον προηγούμενο τρόπο είναι η διαχείριση των λαθών. Αν ψάξουμε για ένα κλειδί (key) που δεν υπάρχει, το πρόγραμμά μας δεν θα σταματήσει απότομα βγάζοντας σφάλμα (exception). Αντίθετα, η Python θα μας επιστρέψει απλώς την τιμή None. Επιπλέον, η get() μας δίνει τη δυνατότητα να ορίσουμε ένα δικό μας, προσαρμοσμένο μήνυμα που θα εμφανίζεται σε περίπτωση που δεν βρεθεί το κλειδί που αναζητάμε!

app.py

employee = {
    'first_name': 'Michail',
    'last_name': 'Kassapoglou',
    'department': 'Training'
}

print(employee.get('first_name', 'There is no first name key'))
print(employee.get('id', 'This employee has no company ID yet'))

Output

Δωρεάν Μαθήματα Python


Προσθήκη Λίστας (List) μέσα σε Dictionary

Όπως αναφέραμε στην αρχή αυτού του δωρεάν μαθήματος Python, τα Dictionaries μπορούν να συνδυαστούν άψογα και με άλλες δομές δεδομένων, όπως είναι τα Lists.

Αυτή ακριβώς η ευελιξία είναι που τα κάνει τόσο πανίσχυρα και τα κατατάσσει ψηλά στις προτιμήσεις των προγραμματιστών. Ας δούμε ένα πρακτικό παράδειγμα, όπου χρησιμοποιούμε μια ολόκληρη λίστα (list) ως τιμή (value) μέσα σε ένα Dictionary.

app.py

employee = {
    'first_name': 'Michail',
    'last_name': 'Kassapoglou',
    'department': 'Training',
    'specialization': ['Python', 'Spring', 'Dart', 'Java']
}

print(employee['specialization'][0])

Output

Δωρεάν Μαθήματα Python


Προσθήκη Dictionary μέσα σε Dictionary (Nested Dictionaries)

Όπως ακριβώς έχουμε τη δυνατότητα να προσθέσουμε λίστες (lists) μέσα σε ένα Dictionary, με τον ίδιο τρόπο μπορούμε να "φωλιάσουμε" ένα ολόκληρο Dictionary μέσα σε ένα άλλο!

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

app.py

employee = {
    'first_name': 'Michail',
    'last_name': 'Kassapoglou',
    'department': 'Training',
    'specialization': {'Python': 'FastAPI', 'Spring': 'Spring Boot'}
}

print(employee['specialization']['Python'])

Output

Δωρεάν Μαθήματα Python


Προσθήκη Νέων Δεδομένων σε ένα Dictionary

Κάθε προγραμματιστής, κάποια στιγμή κατά τη διάρκεια ανάπτυξης του κώδικά του, θα χρειαστεί όχι μόνο να διαβάσει τα δεδομένα ενός Dictionary, αλλά και να προσθέσει δυναμικά ολοκαίνουργια στοιχεία σε αυτό. Ευτυχώς, η διαδικασία για να εισάγουμε ένα νέο ζευγάρι key-value είναι εξαιρετικά απλή και κατανοητή.

app.py

employee = {
    'first_name': 'Michail',
    'last_name': 'Kassapoglou'
}

employee['department'] = 'Training'
print(employee)

Output

Δωρεάν Μαθήματα Python


Ενημέρωση Δεδομένων (Update) σε ένα Dictionary

Για να αλλάξουμε (ή να ενημερώσουμε) μια ήδη υπάρχουσα τιμή, ακολουθούμε ακριβώς τα ίδια βήματα με το προηγούμενο παράδειγμα της προσθήκης. Η λογική της Python εδώ είναι απλή και πανέξυπνη: αν το κλειδί (key) που της δίνουμε υπάρχει ήδη στο Dictionary, τότε απλώς θα αντικαταστήσει την παλιά του τιμή (value) με την καινούργια. Αν, αντίθετα, το κλειδί δεν υπάρχει, τότε θα δημιουργήσει αυτόματα ένα ολοκαίνουργιο ζευγάρι key-value!

app.py

employee = {
    'first_name': 'Michail',
    'last_name': 'Kassapoglou'
}

employee['specialization'] = 'Python'
print(employee)
employee['specialization'] = 'FastAPI'
print(employee)

Output

Δωρεάν Μαθήματα Python


Διαγραφή Δεδομένων από ένα Dictionary

Για να διαγράψουμε οριστικά ένα συγκεκριμένο ζευγάρι key-value από το Dictionary μας, χρησιμοποιούμε την εντολή del. Προσοχή σε μια μικρή λεπτομέρεια: η del δεν είναι μέθοδος, αλλά μια βασική λέξη-κλειδί (statement) της Python, γι' αυτό και δεν βάζουμε παρενθέσεις. Αρκεί να γράψουμε del, το όνομα του Dictionary και δίπλα το κλειδί (key) που θέλουμε να εξαφανίσουμε!

app.py

employee = {
    'first_name': 'Michail',
    'last_name': 'Kassapoglou'
}

employee['specialization'] = 'Python'
print(employee)
employee['specialization'] = 'FastAPI'
print(employee)

del employee['specialization']
print(employee)

Output

Δωρεάν Μαθήματα Python


Εναλλακτική Διαγραφή με τη μέθοδο pop()

Αν και η εντολή del μάς δίνει τη δυνατότητα να διαγράφουμε στοιχεία, πολλές φορές είναι προτιμότερο να χρησιμοποιούμε τις ενσωματωμένες μεθόδους του ίδιου του Dictionary. Εδώ έρχεται η μέθοδος pop(). Το μεγάλο της πλεονέκτημα σε σχέση με την del είναι ότι δεν διαγράφει απλώς το στοιχείο, αλλά μας το "επιστρέφει" κιόλας!

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

app.py

employee = {
    'first_name': 'Michail',
    'last_name': 'Kassapoglou'
}

employee['specialization'] = 'Python'
print(employee)
employee.pop('specialization')
print(employee)

Output

Δωρεάν Μαθήματα Python


Επανάληψη (Loop) σε Keys, Values ή Key-Value Pairs

Επειδή τα Dictionaries στην πράξη περιέχουν συνήθως πάρα πολλά στοιχεία, ο καλύτερος τρόπος για να αποκτήσουμε μια γρήγορη, συνολική εικόνα τους προγραμματιστικά είναι μέσω επαναλήψεων (loops). Η Python μάς δίνει την ευελιξία να χρησιμοποιήσουμε ένα for loop για να διατρέξουμε στοχευμένα μόνο τα κλειδιά (keys), μόνο τις τιμές (values) ή ολόκληρα τα ζευγάρια (key-value).

Ας ξεκινήσουμε με το πώς μπορούμε να λάβουμε μια πλήρη λίστα με όλα τα keys ενός Dictionary. Για να το πετύχουμε αυτό, αρκεί να χρησιμοποιήσουμε τη μέθοδο keys() μέσα στο for loop μας.

app.py

employee = {
    'first_name': 'Michail',
    'last_name': 'Kassapoglou'
}

for key in employee.keys():
    print(key)
    print(employee[key])

Output

Δωρεάν Μαθήματα Python


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

app.py

employee = {
    'first_name': 'Michail',
    'last_name': 'Kassapoglou'
}

for value in employee.values():
    print(value)

Output

Δωρεάν Μαθήματα Python


Τέλος, αν επιθυμείτε να έχετε την πλήρη εικόνα και να δείτε ταυτόχρονα και τα keys (κλειδιά) με τα αντίστοιχά τους values (τιμές) μέσα στο loop, τότε μπορείτε να χρησιμοποιήσετε την εξαιρετικά πρακτική μέθοδο items().

app.py

employee = {
    'first_name': 'Michail',
    'last_name': 'Kassapoglou'
}

for key, value in employee.items():
    print(f"The key is {key} and the value is {value}")

Output

Δωρεάν Μαθήματα Python


Χρήση του in στα Dictionaries

Μπορούμε, επίσης, να χρησιμοποιήσουμε ένα Dictionary μέσα σε ένα if statement, συνδυάζοντάς το με τη λέξη-κλειδί in, για να ελέγξουμε αν υπάρχει το στοιχείο που ψάχνουμε προτού προχωρήσουμε σε κάποια ενέργεια.

Εδώ, όμως, χρειάζεται προσοχή σε μια σημαντική λεπτομέρεια: από προεπιλογή, ο τελεστής in ψάχνει αποκλειστικά στα keys (κλειδιά) του Dictionary και όχι στα values (τιμές).

app.py

employee = {
    'first_name': 'Michail',
    'last_name': 'Kassapoglou'
}

if 'first_name' in employee:
    print(f"The employee has a name {employee['first_name']}")

Output

Δωρεάν Μαθήματα Python


Στο σημερινό δωρεάν μάθημα Python αναλύσαμε αρκετές από τις πιο χρήσιμες μεθόδους που μας προσφέρει το Dictionary. Φυσικά, η μάθηση δεν σταματά εδώ! Σας προτρέπω να εξερευνήσετε μόνοι σας και τις υπόλοιπες διαθέσιμες μεθόδους, όπως για παράδειγμα τις popitem(), clear() και copy(), για να δείτε τι ακριβώς κάνουν.

Στηρίξτε την προσπάθειά μας! Αν βρήκατε αυτό το δωρεάν μάθημα χρήσιμο, μην ξεχάσετε πως μπορείτε να κάνετε ένα μικρό donation. Η υποστήριξή σας βοηθάει αυτό το site να μεγαλώσει, να εξελιχθεί και να αποκτήσει ακόμα περισσότερες δυνατότητες για την online παράδοση δωρεάν μαθημάτων!

full-width

Post a Comment

0 Comments