Έχω μια λίστα με λεξικά και θέλω κάθε στοιχείο να ταξινομείται με βάση συγκεκριμένες τιμές ιδιοτήτων.
Λάβετε υπόψη τον παρακάτω πίνακα,
[{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
Όταν ταξινομηθεί με βάση το "όνομα", θα πρέπει να γίνει
[{'name':'Bart', 'age':10}, {'name':'Homer', 'age':39}]
my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
my_list.sort(lambda x,y : cmp(x['name'], y['name']))
Η "λίστα μου" θα είναι τώρα αυτή που θέλετε.
(3 χρόνια αργότερα) Τροποποιήθηκε για να προστεθεί:
Το νέο όρισμα key
είναι πιο αποτελεσματικό και πιο τακτοποιημένο. Μια καλύτερη απάντηση τώρα μοιάζει με:
my_list = sorted(my_list, key=lambda k: k['name'])
...το lambda είναι, ΙΜΟ, πιο κατανοητό από το operator.itemgetter
, αλλά YMMV.
Υποθέτω ότι εννοούσες:
[{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
Αυτό θα μπορούσε να ταξινομηθεί ως εξής:
sorted(l,cmp=lambda x,y: cmp(x['name'],y['name']))
Πρέπει να υλοποιήσετε τη δική σας συνάρτηση σύγκρισης που θα συγκρίνει τα λεξικά με βάση τις τιμές των κλειδιών ονόματος. Δείτε Mini-HOW TO ταξινόμησης από το PythonInfo Wiki