Newbie: changing an attribute of objects in a list

Ben Simuyandi bsimuyandi at africonnect.com
Wed Jun 11 07:09:41 EDT 2003


Hello. I am very new to Python and I'm stuck with a problem. I am using
Zope, and the problem is:

I have a list of objects, each of which has several attributes. I would like
to sort these objects by a specific attribute, which is a string. This I can
manage OK. But if two objects have the same attribute value, I would like to
change the older (age determined by another attribute) object's attribute
to a new value of (old value+1), then go through the list and see if any
other object has this value, if so give it (old value+2) etc.

I hope I have made the problem clear. I know that my code is wrong, but I
would like some hints as to what I am doing wrong. Some of it comes down to
a lack of understanding of Python.

The ordering attribute I'll call "ordering", the age attribute I'll call
"age", and the list of objects is "contents". I thought that the way to do
this was by calling a function recursively. Anyway, below is the code, any
feedback is appreciated.


def check_listingorder(x, contents):
  for y in contents:
    if x.Id != y.Id:                                           #each object
has a unique id
      xorder=int(x.ordering)                             #convert the string
to an integer
      yorder=int(y.ordering)
      if xorder==yorder:                                    #if the ordering
attribute is the same then...
        if x.age> y.age:                                       #if x is
older than y then...
          xorder=xorder+1
         <set object ordering value to xorder>
          check_listingorder(x, contents)
#call function again?
        elif y.age> x.age:                                       #if y is
older than x then...
          yorder=yorder+1
         <set object ordering value to yorder>
          check_listingorder(y, contents)                              #call
function again?
  return contents                                                #return the
list?

for x in contents:                                               #originally
called with:
  check_listingorder(x, contents)








More information about the Python-list mailing list