> I'd be just such a newbie; I don't understand why it would matter if
I
> left the book instance referencing itself....
It's just kind of sloppy and unnecessary to have self.self
> firstly, I am trying hard to figure out how to create a new file
with
> the list rather than print to standard out. I haev done this:
I think you want 'a' instead of 'w+' as the file's mode. You can also
open and close the file outside of the loop; it would be more
efficient.
> Secondly, I am wondering how I can get a search algorithm that will
> search by multiple fields here, so that I can (as one example) sort
> the books out by author and then date, to present a list of the book
> grouped by authors and having each group presented in a chronological
> order, or by author and title, grouping all the books up into
authors
> presenting each group alphabetically by title. Or by publisher and
> date, or by publisher and code....
So far, we've been using the "key" parameter of list.sort. If you want
sort criteria more complicated than a single attribute, you can sort
based on a custom comparison function. Comparison functions compare
two objects (let's call them A and B), and return one of three possible
values:
A is greater than B => 1
A is less than B => -1
A and B are equal => 0
The built-in function "cmp" can be used to compare objects; behavior is
defined for built-in types:
cmp(0, 1) => -1
cmp("Zylophone", "Abstract") => 1 # alphabetical ordering for strings
cmp( [1,2,3], [1,2,3] ) => 0 # compare sequence elements from left to
right
So another way to do a sort-by-author for your books would be:
def compare_authors(book1, book2):
return cmp(book1.author, book2.author)
books.sort(compare_authors)
A more complicated comparison function might nest two others:
def compare_dates(book1, book2):
# Assuming that your dates are either numerical or are strings
for which
# alphabetical sorting is identical to chronological...
return cmp(book1.date, book2.date)
def compare_author_and_date(book1, book2):
different_authors = compare_authors(book1, book2)
if different_authors: # different authors
return different_authors
else: # same author. sort by date.
return compare_dates(book1, book2)
books.sort(compare_author_and_date)
--
http://mail.python.org/mailman/listinfo/python-list