sorting question

Ksenia Marasanova ksenia.marasanova at gmail.com
Wed Aug 10 06:44:09 EDT 2005


Example of the wrong sort:



class Node:

    def __init__(self, name, url, order, pid, id):
        self.name = name
        self.url = url
        self.order = order
        self.pid = pid
        self.id = id

    def __repr__(self):
        return '%s [order: %s]' % (self.url, self.order)

def mycmp(x,y):
    print "COMPARING", x, y
    if x.pid == y.pid:
        if x.order != y.order:
            return cmp(x.order,y.order)
        return cmp(x.url,y.url)
    #return cmp(x.pid,y.pid)
    return cmp(x.url,y.url)

list = [
    Node('top','/', order=1, pid=0, id=1000),
    Node('ham','/test/ham/', order=1, pid=400, id=21),
    Node('ham','/test2/spam/', order=1, pid=300, id=32),
    Node('ham','/test2/spam/spam/', order=1, pid=32, id=320),
    Node('ham','/test2/ham/', order=2, pid=300, id=31),
    Node('eggs','/test/ham/eggs/', order=1, pid=21, id=121),
    Node('eggs','/test2/ham/eggs/', order=1, pid=21, id=1210),
    Node('spam','/test2/', order=10, pid=1000, id=300),
    Node('spam','/test/', order=1, pid=1000, id=400)
]

print "++++++++++++++ BEFORE SORTING +++++++++++++"
for item in list:
    print item

list.sort(mycmp)

print "++++++++++++++ AFTER SORTING +++++++++++++"
for item in list:
    print item
~                   
-- 
Ksenia



More information about the Python-list mailing list