sorting a shelve

bjorn bjorn at
Thu Mar 9 01:31:03 CET 2000

You are really looking for relational functionality here, so Gadfly might
be your best choice.  If you insist on using shelve, you'll probably have
to manually create and maintain indices, e.g. something like (untested):

    class MyDB:
        def __init__(self, myshelve):
            self.lastnames = {}
            self.s = myshelve

        def addPerson(self, email, fistname, lastname):
            self.s[email] = (email, firstname, lastname)
            tmp = self.lastnames.get(lastname, [])
            self.lastnames[lastname] = tmp

        def find(self, lastname):
            tmp = []
            for email in self.lastnames[lastname]:
                tmp.append( self.s[email] )
            return tmp

basically, under each lastname in self.lastnames, you keep a list of email
addresses for people with that last name.

You'll probably want to store the indices in the shelve also.

-- bjorn

Anders Eriksson wrote:

> Hello!
> I'm thinking of creating a simple addressbook and using a shelve as
> the 'database'. Say I use the email address as the key and then as the
> value I have a list of all the things I want to save about this
> person, like first and last name, phone, fax, address, city, etc.
> Now I I know the email address then it's very easy to find the rest of
> the info and if I know the first name then I could just loop until I
> found it... but if I want to create a print out sorted by last name
> and only thos that live in London; how do I go about?
> // Anders
> --

More information about the Python-list mailing list