On Mar 8, 4:48 am, "andrew cooke" <and...@acooke.org> wrote: > odeits wrote: > > On Mar 7, 1:07 pm, Scott David Daniels <scott.dani...@acm.org> wrote: > >> odeits wrote: > >> > I am looking to clean up this code... any help is much appreciated. > >> > Note: It works just fine, I just think it could be done cleaner. > > >> > The result is a stack of dictionaries. the query returns up to > >> > STACK_SIZE ads for a user. The check which i think is very ugly is > >> > putting another contraint saying that all of the ni have to be the > >> > same. > > >> Well, the obvious way to get your constraint is by changing your SQL, > >> but if you are going to do it by fetching rows, try: > > >> FIELDS = 'ni adid rundateid rundate city state status'.split() > >> ni = UNSET = object() # use None unless None might be the value > >> stack = [] > >> rows = self.con.execute(adquerystring, > >> (user,STACK_SIZE)).fetchall() > >> for row in rows: > >> ad = dict() > >> for field in FIELDS: > >> ad[field] = row[field] > >> for field in 'city', 'state': > >> if ad[field] is None: > >> ad[field] = 'None' > >> if ni != ad['ni']: > >> if ni is UNSET: > >> ni = ad['ni'] > >> else: > >> break > >> stack.append(ad) > > >> --Scott David Daniels > >> scott.dani...@acm.org > > > Taking from several suggestions this is what i have come up with for > > now: > > > for row in ifilter(lambda r: r['ni'] == rows[0]['ni'],rows): > > not sure what version of python you're using, but it would be more natural > in recent python to write that as: > > for row in (r for r in rows if r['ni'] == rows[0]['ni']): > > (the () create a generator for you). > > andrew > > > ad = dict() > > > keys = row.keys() # if python 2.6 > > keys = > > ['ni','adid','rundateid','rundate','city','state','status'] # if > > python 2.5 > > > for index in row.keys(): > > if row[index] is None: > > ad[index] = 'None' > > else: > > ad[index] = row[index] > > stack.append(ad) > > print row > > > the test to see if the ad is valid is placed in the ifilter so that I > > dont build the dictionary unnecessarily. and the None special case is > > fairly simple to read now. The None case would even be irrelevant if i > > could get the damn xmlrpc to allow null. sigh. anyhow. thanks for all > > of your input, it is definitely better than it was ;) > > -- > >http://mail.python.org/mailman/listinfo/python-list
This function is very time critical so i went with itertools "for efficient looping" and i am runing 2.5 -- http://mail.python.org/mailman/listinfo/python-list