Oktatás * Programozás 2 * Szkriptnyelvek * levelezősök Félévek Linkek * kalendárium |
Py /
20170517cobjektumok listájának rendezése A példákhoz az alábbi kódot fogjuk felhasználni: #!/usr/bin/env python3 class Movie: def __init__(self, title, score): self.title = title self.score = score def get_score(self): return self.score def __repr__(self): return "{t} {s}".format(t=self.title, s=self.score) def main(): m1 = Movie('AA', 7.0) m2 = Movie('BB', 6.5) m3 = Movie('CC', 8.0) li = [m1, m2, m3] print(li) main() Kimenet: [AA 7.0, BB 6.5, CC 8.0] Rendezés példányváltozó szerint (attrgetter) Rendezzük a listát az objektumok from operator import attrgetter print(sorted(li, key=attrgetter('score'))) print(sorted(li, key=lambda m: m.score)) # manual solution [BB 6.5, AA 7.0, CC 8.0] [BB 6.5, AA 7.0, CC 8.0] Rendezés példánymetódus szerint (methodcaller) Rendezzük a listát az objektumok from operator import methodcaller print(sorted(li, key=methodcaller('get_score'))) print(sorted(li, key=lambda m: m.get_score())) # manual solution [BB 6.5, AA 7.0, CC 8.0] [BB 6.5, AA 7.0, CC 8.0] Szótárak listájának rendezése valamelyik kulcs szerint (itemgetter) #!/usr/bin/env python3 from operator import itemgetter def main(): li = [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age': 10}] print(li) print() print(sorted(li, key=itemgetter('age'))) print(sorted(li, key=lambda d: d['age'])) # manual solution main() [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age': 10}] [{'name': 'Bart', 'age': 10}, {'name': 'Homer', 'age': 39}] [{'name': 'Bart', 'age': 10}, {'name': 'Homer', 'age': 39}] Összefoglaló Látható, hogy a lambdás megoldás mindhárom esetben használható. Ha az Linkek |
Blogjaim, hobbi projektjeim * The Ubuntu Incident [ edit ] |