Re: Sorting a List of Lists
- From: "Paddy" <paddy3118@xxxxxxxxxxxx>
- Date: 31 Jan 2007 10:09:53 -0800
On Jan 31, 12:35 pm, Bruno Desthuilliers <bruno.
42.desthuilli...@xxxxxxxxxxxxxxxxxxxxxxxx> wrote:
apoth...@xxxxxxxxx a écrit :
I can't seem to get this nailed down and I thought I'd toss it out
there as, by gosh, its got to be something simple I'm missing.
I have two different database tables of events that use different
schemas. I am using python to collate these records for display. I do
this by creating a list of lists that look roughly like this:
events = [['Event URL as String', 'Event Title as String ', Event Date
as Datetime], ...]
Then you should not use a list of lists, but a list of tuples.
I then thought I'd just go events.sort(lambda x,y: x[2]<y[2]) and call
it a day. That didn't work. But then lamda functions like to be very
simple, maybe object subscripts aren't allowed (even though I didn't
get an error). So I wrote a comparison function that looks much as you
would expect:
def date_compare(list1,
list2):
x = list1[2]
y = list2[2]
if
x>y:
return
1
elif
x==y:
return
0
else: #
x<y
return -1
But as before sorting with this function returns None.
What have I overlooked?
Lol.
I guess this is a FAQ. list.sort() performs a destructive in-place sort,
and always return None. This is in the FineManual:
bruno@bruno:~$ python
Python 2.4.4c1 (#2, Oct 11 2006, 21:51:02)
[GCC 4.1.2 20060928 (prerelease) (Ubuntu 4.1.1-13ubuntu5)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> help(list.sort)
Help on method_descriptor:
sort(...)
L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
cmp(x, y) -> -1, 0, 1
You may want to use sorted(iterable, cmp=None, key=None, reverse=False)
if you don't want to sort in-place.
Also, using comparison functions is usually not the most efficient way
to do such a sort. In your case, I'd go for a good old
Decorate/sort/undecorate (AKA schwarzian transform):
events = [evt for date, evt in
sorted([(evt[2], evt) for evt in events])]
HTH
I agree with you B., but see the comments here:
http://www.biais.org/blog/index.php/2007/01/28/23-python-sorting-
efficiency
for information on the relative speeds of rolling your own DSU versus
using itemgetter and key=...
- Paddy.
.
- Follow-Ups:
- Re: Sorting a List of Lists
- From: Bruno Desthuilliers
- Re: Sorting a List of Lists
- References:
- Sorting a List of Lists
- From: apotheos
- Re: Sorting a List of Lists
- From: Bruno Desthuilliers
- Sorting a List of Lists
- Prev by Date: Re: where has Stani's Py Editor gone?
- Next by Date: Re: "Correct" db adapter
- Previous by thread: Re: Sorting a List of Lists
- Next by thread: Re: Sorting a List of Lists
- Index(es):
Relevant Pages
|