Using class-attribute as key to sort?

Chris Rebert cvrebert+clp at gmail.com
Fri Aug 29 14:48:25 EDT 2008


Just use the "key" argument to list.sort; e.g.

class Foo(object):
    def __init__(self, x):
        self.x = x
    def __repr__(self):
        return "Foo:"+str(self.x)

foos = [Foo(75), Foo(10), Foo(-1)]
foos.sort(key = lambda foo: foo.x)
print foos #=> [Foo:-1, Foo:10, Foo:75]

- Chris
========
Follow the path of the Iguana...
http://rebertia.com

On Fri, Aug 29, 2008 at 11:22 AM, cnb <circularfunc at yahoo.se> wrote:
> In median grade, can I sort on Review-grade somehow?
> something like:
> sr = self.reviews.sort(key=self.reviews.instance.grade)
>
> class Review(object):
>    def __init__(self, movieId, grade, date):
>        self.movieId = movieId
>        self.grade = grade
>        self.date = date
>
> class Customer(object):
>    def __init__(self, idnumber, review):
>        self.idnumber = idnumber
>        self.reviews = [review]
>
>    def addReview(self, review):
>        self.reviews.append(review)
>
>    def averageGrade(self):
>        tot = 0
>        for review in self.reviews:
>            tot += review.grade
>        return tot / len(self.reviews)
>
>    #general sort that takes list+spec of objectkey to sort on?
>    def sortReviews(self):
>        def qsort(lista):
>            if len(lista) != 0:
>                return qsort([x for x in lista[1:] if x.grade <
> lista[0].grade]) + [lista[0]] + \
>                       qsort([x for x in lista[1:] if x.grade >=
> lista[0].grade])
>            else:
>                return []
>        return qsort(self.reviews)
>
>    def medianGrade(self):
>        length = len(self.reviews)
>        sr = self.sortReviews()
>        #sr = self.reviews.sort(key=self.reviews.instance.grade)
>        if length % 2 == 0:
>            return (sr[int(length/2)].grade + sr[int(length/
> 2-1)].grade) / 2
>        else:
>            if length == 1:
>                return sr[0].grade
>            else:
>                return sr[int(round(length/2)-1)].grade
> --
> http://mail.python.org/mailman/listinfo/python-list
>



More information about the Python-list mailing list