I have a model with an attribute which keeps track of the price. Right now, I have a list of that certain model. Is there anyway to rearrange the list to sort by that particular attribute? Is python smart enough to know that the attribute is a value which can be sorted? I am not keeping keeping track of the instances of a particular model using a database (it is not needed for what I am doing, so I cannot just retrieve the instances from the database in sorted order)
You can use the inbuilt
sorted function, together with a custom-made function that returns the price of an object:
class Dummy(object) : pass def getPrice(obj) : return obj.price d0 = Dummy() d0.price = 56. d1 = Dummy() d1.price=16. d2 = Dummy() d2.price=786. d3 = Dummy() d3.price=5.5 elements = [d0, d1, d2, d3] print 'Pre-sorting:' for elem in elements : print elem.price sortedElements = sorted(elements, key=getPrice) print 'Post-sorting:' for elem in sortedElements : print elem.price
This would also work via any method of your class that returns the price, e.g.
class Dummy(object) : def __init__(self, price) : self._price = price def getPrice(self) : return self._price ... sortedElements = sorted(elements, key = Dummy.getPrice)
See http://wiki.python.org/moin/HowTo/Sorting/ for more.
Answered By – juanchopanza