Python

ΕΝΟΤΗΤΑ 18 - Dictionaries

image description

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

Το Dictionary μας προσφέρει την δυνατότητα να αποθηκεύσουμε τα δεδομένα με unordered τρόπο. Τι ακριβώς σημαίνει unordered? Σημαίνει ότι δεν χρησιμοποιούμε index για να βρούμε τις αποθηκευμένες τιμές, αλλά χρησιμοποιούμε κλειδιά. Για να αποθηκεύσουμε μια τιμή σε ένα Dictionary, πρέπει να ορίσουμε δύο τιμές: ένα κλειδί (key) με το οποίο θα μπορούμε να βρούμε το δεδομένο, και μια τιμή (value) που στην ουσία είναι η τιμή που θέλουμε να αποθηκεύσουμε. Για να μπορούμε να βρούμε το value θα πρέπει να καλέσουμε το key.

Πριν όμως δείξουμε ένα παράδειγμα για να γίνει πιο ξεκάθαρη η έννοια του key-value συνδυασμού που πρέπει να χρησιμοποιήσουμε για να αποθηκεύσουμε μια τιμή, ας δούμε λίγο ακόμα που διαφέρει ένα List με ένα Dictionary.

Τα Lists λοιπόν όπως τα είδαμε σε προηγούμενες ενότητες θεωρούνται ordered collections γιατί κάθε στοιχείο της λίστας αποθηκεύεται αμέσως μετά από το προηγούμενο. Αυτή η συνέχεια που υπάρχει στα δεδομένα, μας δίνει την δυνατότητα να χρησιμοποιήσουμε index για να καλέσουμε και να διαχειριστούμε τα αποθηκευμένα στοιχεία. Το Dictionary όμως δεν χρησιμοποιεί index αλλά τον συνδυασμό key-value. Αυτό σημαίνει ότι δεν υπάρχει καμία αξία και σημασία στην σειρά που αποθηκεύονται τα δεδομένα. Για αυτό και άλλωστε δεν είναι διαθέσιμο κάποιο index. Αυτό που μας ενδιαφέρει είναι ότι καλώντας το key μπορούμε να λάβουμε το value το οποίο αντιπροσωπεύει. Τα Dictionaries είναι πολύ χρήσιμα όταν χρησιμοποιούμε πολύ μεγάλο μέγεθος δεδομένων προς ανάλυση, όταν στέλνουμε και λαμβάνουμε δεδομένα και γενικότερα όταν δημιουργούμε APIs.

Για να δημιουργήσουμε ένα Dictionary θα πρέπει να χρησιμοποιήσουμε curly brackets ( { } ). Ανάμεσα στα curly brackets ορίζουμε τις ομάδες των key-value ζευγαριών από τιμές που θέλουμε να αποθηκεύσουμε. Ένα απλό παράδειγμα ορισμού ενός Dictionary είναι το εξής:

App.py


employee = {
	'name':"Michail Kassapoglou",
	'department':"Training"
}
	
   

Στο παραπάνω παράδειγμα, τα keys είναι οι λέξεις name και department ενώ τα values είναι το “Michail Kassapoglou” και το “Training”. Για να λάβουμε την τιμή Michail Kassapoglou θα πρέπει να την αναζητήσουμε με το κλειδί name.

Τα keys μπορούν να είναι μόνο είδος strings και numbers, ενώ τα values μπορούν να είναι όλα τα data types, άλλα collections όπως lists ή ακόμα και άλλα dictionaries. Τέλος, υπάρχει ένα colon ( : ) που χωρίζει την δήλωση του key από το value ενώ υπάρχει κόμμα που χωρίζει κάθε καινούργια δήλωση ενός value.

App.py


employee = {
	'name':"Michail Kassapoglou",
	'department':"Training"
}

print(employee)
	
   

Output


{'name': 'Michail Kassapoglou', 'department': 'Training'}	
	 

Στο προηγούμενο παράδειγμα, απλά τυπώσαμε όλο το Dictionary. Αυτό συνήθως το κάνουμε για να λάβουμε μια γνώση των δεδομένων που περιέχει ένα Dictionary. Στον κώδικα μας όμως, τις περισσότερες φορές θα αναζητήσουμε μια συγκεκριμένη τιμή. Αυτό γίνεται, όπως ήδη έχουμε αναφέρει, με το key. Για να λάβουμε λοιπόν το όνομα του εργαζόμενου πρέπει να γράψουμε το όνομα του Dictionary και αμέσως μετά μέσα σε square brackets ( [ ] ) το όνομα του key. Αυτό θα μας δώσει του όνομα της τιμής την οποία αντιπροσωπεύει το συγκεκριμένο key.

App.py


employee = {
	'name':"Michail Kassapoglou",
	'department':"Training"
}

print(employee["name"])
	
   

Output


Michail Kassapoglou	
	 

Υπάρχει ένας δεύτερος τρόπος για να λάβουμε την τιμή του value και αυτός είναι να χρησιμοποιήσουμε την μέθοδο get( ). Η διαφορά με τον προηγούμενο τρόπο είναι ότι αν μέσα στο get( ) γράψουμε κάποιο όνομα key το οποίο δεν υπάρχει, δεν θα πάρουμε μήνυμα λάθους αλλά την λέξη None. Για να καλύψετε αυτή την περίπτωση μπορείτε να βάλε μια δεύτερη παράμετρο μέσα στην μέθοδο get( ) και να γράψετε το μήνυμα που θέλετε να εμφανιστεί εάν δεν υπάρχει το συγκεκριμένο key.

App.py


employee = {
	'name':"Michail Kassapoglou",
	'department':"Training"
}

print(employee.get("name"))
print(employee.get("ID", "This employee has no ID"))
	
   

Output


Michail Kassapoglou
This employee has no ID
	
	 

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

App.py


employee = {
	'name':"Michail Kassapoglou",
	'department':"Training",
	'courses':["Java", "Python", "Dart"]
}

print(employee["courses"][1])
	
   

Output


Python
	
	 

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

App.py


employee = {
	'name':"Michail Kassapoglou",
	'department':"Training",
	'courses':{"java":"Java EE", "Python":"Flask", "Dart":"Flutter"}
}

print(employee["courses"]["Python"])
	
   

Output


Flask
	
	 

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

App.py


employee = {
	'name':"Michail Kassapoglou",
	'department':"Training"
}

employee["courses"] = "Python"
print(employee)
	
   

Output


{'name': 'Michail Kassapoglou', 'department': 'Training', 'courses': 'Python'}
	
	 

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

App.py


employee = {
	'name':"Michail Kassapoglou",
	'department':"Training"
}

employee["courses"] = "Python"
print(employee)
employee["courses"] = "Python Frameworks"
print(employee)
	
   

Output


{'name': 'Michail Kassapoglou', 'department': 'Training', 'courses': 'Python'}
{'name': 'Michail Kassapoglou', 'department': 'Training', 'courses': 'Python Frameworks'}

	 

Για να διαγράψουμε ένα συγκεκριμένο ζευγάρι key-value από το Dictionary χρησιμοποιούμε την μέθοδο del( ).

App.py


employee = {
	'name':"Michail Kassapoglou",
	'department':"Training"
}

employee["courses"] = "Python"
print(employee)
del employee["courses"]
print(employee)
	
   

Output


{'name': 'Michail Kassapoglou', 'department': 'Training', 'courses': 'Python'}
{'name': 'Michail Kassapoglou', 'department': 'Training'}

	 

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

Ας δούμε πρώτα ένα παράδειγμα, πως μπορούμε να δούμε τα keys που περιέχει ένα Dictionary. Θα χρησιμοποιήσουμε την μέθοδο keys( ) που περιέχει κάθε Dictionary.

App.py


employee = {
	'name':"Michail Kassapoglou",
	'department':"Training"
}

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

Output


name
Michail Kassapoglou
department
Training

	 

Αν δεν θέλετε να λάβετε τα keys και ζητάτε μόνο τα values τότε μπορείτε να χρησιμοποιήσετε την μέθοδο values( ).

App.py


employee = {
	'name':"Michail Kassapoglou",
	'department':"Training"
}

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

Output


Michail Kassapoglou
Training
	 

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

App.py


employee = {
	'name':"Michail Kassapoglou",
	'department':"Training"
}

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

Output


They key is name and the value is Michail Kassapoglou
They key is department and the value is Training

	 

ΕΙΣΗΓΗΤΗΣ

Merry Jhonson

Μιχάλης Κασάπογλου

Ο Μιχάλης Κασάπογλου, είναι ένας από τους πιο έμπειρους τεχνικούς εκπαιδευτές στον χώρο του προγραμματισμού με πάνω από 20 χρόνια εμπειρία. Έχει εργαστεί σαν IT Operations Manager, Senior Programmer, και Training Team Leader ενώ κατέχει και αρκετές πιστοποιήσεις που καλύπτουν ένα μεγάλο φάσμα τεχνολογιών στο προγραμματισμό, σε βάσεις δεδομένων και cloud. Στον ελεύθερο του χρόνο διατηρεί ένα τεχνολογικό blog στο οποίο θα βρείτε αρκετά δωρεάν μαθήματα προγραμματισμού για αρχάριους.

loader