You are currently viewing Η δομή δεδομένων Dictionary στην Python

Η δομή δεδομένων Dictionary στην Python


Ένα λεξικό (dictionary) στην python (ο λεγόμενος πίνακας κατακερματισμού σε άλλες γλώσσες προγραμματισμού) είναι μία δομή δεδομένων η οποία αποθηκεύει ζευγάρια της μορφής <κλειδί,τιμή>.  Σε αντίθεση με τις λίστες, στις οποίες η αναζήτηση γίνεται με βάση κάποιον ακέραιο δείκτη που δείχνει σε συγκεκριμένη θέση μέσα στην λίστα, στο λεξικό η αναζήτηση γίνεται με βάση κάποιο κλειδί. Έτσι, έχουμε ζευγάρια της μορφής (string,[]), ( tuple, string) , (int,[]) κ.α.

Δημιουργία Λεξικού (Python)

Για την δημιουργία ενός λεξικού στην python αρκεί να ορίσουμε my_dict = {} ή my_dict = { 'tooth':'teeth' , 'find':'found' } ή my_dict = dict(). Η πρώτη και η τελευταία δήλωση αρχικοποιούν ένα κενό λεξικό ενώ η δεύτερη εισάγει τα ζεύγη (tooth,teeth) και (find,found).

Εισαγωγή ζεύγους στο Λεξικό

Η εισαγωγή ενός ζεύγους σε ένα λεξικό είναι πολύ απλή. Για παράδειγμα, έστω ότι θέλουμε να δημιουργήσουμε έναν ανεστραμμένο κατάλογο (inverted index) στα τρία “έγγραφα” που βλέπουμε παρακάτω:

    • doc1: Οι γάτες κυνηγούν τα ποντίκια
    • doc2: Οι γάτες φοβούνται το σκοτάδι
  • doc3: Τα ποντίκια ζούνε στα υπόγεια

Θεωρούμε ότι κάποια βασική επεξεργασία του κειμένου έχει γίνει (π.χ stemming, stopwords removal) και έστω ότι έχουν εξαχθεί οι λέξεις ( γάτα, κυνηγώ, ποντίκι, φοβάμαι, σκοτάδι, ζω, υπόγειο). Αυτές οι λέξεις αποτελούν το λεξιλόγιό μας. Σκοπός, είναι να αποθηκεύσουμε σε μία δομή δεδομένων τις λέξεις του λεξιλογίου και για κάθε λέξη να κρατάμε μία λίστα με όλα τα έγγραφα στα οποία η λέξη έχει εμφανισθεί. Ο κώδικας που προκύπτει είναι:

 
voc = ['γάτα','ποντίκι','σκοτάδι',...]
docs= ['γάτα κυνηγώ  ποντίκι','γάτα φοβάμαι σκοτάδι' ...]
i_i = dict()
for word in voc:
  i_i[word] = []  #κάθε λέξη πρέπει να έχει μία λίστα 
  for i in range(0,len(docs)):
     if word in doc:  #αν η λέξη υπάρχει στο ι-οστό έγγραφο
        i_i[word].append(i) #κρατάμε τον δείκτη i
        break
  

Αναζήτηση με βάση το κλειδί

Συνεχίζοντας το προηγούμενο παράδειγμα, για να βρούμε την λίστα των εγγράφων που περιέχουν την λέξη ‘γάτα’ και ύστερα να την τυπώσουμε αρκεί να γράψουμε print i_i['γάτα'] . Σε περίπτωση που θέλουμε να διατρέξουμε την λίστα και να τυπώσουμε τον δείκτη κάθε εγγράφου σε ξεχωριστή γραμμή, το ακόλουθο σκριπτ μας δίνει τη λύση:

for doc_id in i_i['γάτα']:
   print doc_id

Και αν επιθυμούμε να τυπώσουμε το κείμενου του ι-οστού εγγράφου αρκεί να γράψουμε print docs[doc_id]

Αναζήτηση με βάση την τιμή

Ας υποθέσουμε ότι θέλουμε για το έγγραφο 2 να τυπώσουμε όλες τις λέξεις που εμφανίζονται σε αυτό. Το σκριπτ είναι:

id=2
for key in i_i:
    if id in i_i[key]:
       print key

Διαγραφή ενός ζεύγους από το λεξικό

Για την διαγραφή ενός ζεύγους αρκεί να χρησιμοποιήσουμε την δεσμευμένη λέξη κλειδί del ως εξής : del i_i[key]

Βιβλιογραφία Python

  1. https://docs.python.org/2/tutorial/datastructures.html
  2. http://www.nltk.org/book/ch05.html
  3. https://www.tutorialspoint.com/python/python_dictionary.htm

Για περισσότερα νέα στην πληροφορική δείτε εδώ!

Αφήστε μια απάντηση