Recent Changes - Search:

Oktatás

* Programozás 2
  + feladatsor
  + C feladatsor
  + Python feladatsor
  + GitHub oldal

* Szkriptnyelvek
  + feladatsor
  + quick link

* levelezősök
  + Adator. prog.
  + feladatsor
  + quick link

teaching assets


Félévek

* 2024/25/1
* archívum


Linkek

* kalendárium
   - munkaszüneti napok '20
* tételsorok
* jegyzetek
* szakdolgozat / PhD
* ösztöndíjak
* certificates
* C lang.
* C++
* C#
* Clojure
* D lang.
* Java
* Nim
* Scala


[ edit | logout ]
[ sandbox | passwd ]

Py /

20170517c

objektumok 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 score értéke alapján:

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 get_score() függvénye által visszaadott értékek alapján:

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 operator modul megfelelő függvényét használjuk, akkor talán szebb, áttekinthetőbb lesz a kód, viszont itt 3 különböző függvény nevét kell megjegyezni. Ha nem emlékszünk rájuk, akkor használjuk nyugodtan a lambdás módszert.

Linkek

Cloud City

  

Blogjaim, hobbi projektjeim

* The Ubuntu Incident
* Python Adventures
* @GitHub
* heroku
* extra
* haladó Python
* YouTube listák


Debrecen | la France


[ edit ]

Edit - History - Print *** Report - Recent Changes - Search
Page last modified on 2017 May 24, 13:41