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