Περισσότερα
Επανάληψη σε λεξικά χρησιμοποιώντας βρόχους 'for'
Με προβληματίζει λίγο ο παρακάτω κώδικας:
d = {'x': 1, 'y': 2, 'z': 3}
for key in d:
print key, 'corresponds to', d[key]
Αυτό που δεν καταλαβαίνω είναι το τμήμα "κλειδί". Πώς αναγνωρίζει η Python ότι χρειάζεται να διαβάσει μόνο το κλειδί από το λεξικό; Είναι η λέξη "κλειδί" μια ειδική λέξη στην Python; Ή είναι απλά μια μεταβλητή;
2875
3
Το
key
είναι απλώς ένα όνομα μεταβλητής.θα κάνει απλά βρόχο πάνω από τα κλειδιά του λεξικού, αντί για τα κλειδιά και τις τιμές. Για να κάνετε βρόχο και στα δύο κλειδιά και στις δύο τιμές μπορείτε να χρησιμοποιήσετε τα εξής:
Για την Python 2.x:
Για Python 3.x:
Για να το δοκιμάσετε μόνοι σας, αλλάξτε τη λέξη
key
σεpoop
.Για την Python 3.x, η
iteritems()
έχει αντικατασταθεί με την απλήitems()
, η οποία επιστρέφει μια προβολή που μοιάζει με σύνολο και υποστηρίζεται από την dict, όπως ηiteritems()
αλλά ακόμα καλύτερα. Αυτό είναι επίσης διαθέσιμο στην 2.7 ωςviewitems()
.Η λειτουργία
items()
θα λειτουργεί και για το 2 και για το 3, αλλά στο 2 θα επιστρέφει μια λίστα με τα ζεύγη(key, value)
του λεξικού, τα οποία δεν θα αντικατοπτρίζουν τις αλλαγές στο dict που συμβαίνουν μετά την κλήση τηςitems()
. Αν θέλετε τη συμπεριφορά της 2.x στην 3.x, μπορείτε να καλέσετε τηνlist(d.items())
.Όταν κάνετε επανάληψη σε λεξικά χρησιμοποιώντας το συντακτικό
for .. in ..
, πάντα γίνεται επανάληψη στα κλειδιά (οι τιμές είναι προσβάσιμες χρησιμοποιώντας τοdictionary[key]
).Για να κάνετε επανάληψη σε ζεύγη κλειδιών-τιμών, στην Python 2 χρησιμοποιήστε
for k,v in s.iteritems()
, και στην Python 3for k,v in s.items()
.Αυτό είναι ένα πολύ συνηθισμένο ιδίωμα βρόχου. Το
in
είναι ένας τελεστής. Για το πότε πρέπει να χρησιμοποιείτε τοfor key in dict
και πότε πρέπει να είναιfor key in dict.keys()
δείτε David Goodger's Idiomatic Python article (αρχειοθετημένο αντίγραφο).