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. > > stack = [] > rows = self.con.execute(adquerystring,(user,STACK_SIZE)).fetchall() > for row in rows: > ad = dict() > ad['ni'] = row['ni'] > ad['adid'] = row['adid'] > ad['rundateid'] = row['rundateid'] > ad['rundate'] = row['rundate'] > if row['city'] is None: > ad['city'] = 'None' > else: > ad['city'] = row['city'] > if row['state'] is None: > ad['state'] = 'None' > else: > ad['state'] = row['state'] > ad['status'] = row['status'] > try: > if stack[0]['ni'] != ad['ni']: > break; > except IndexError: > pass > stack.append(ad)
NI = 'ni' def copy(src, dst, name, quote_none=False): value = src[name] dst[name] = 'None' if quote_none and value is None else value stack = [] for row in self.con.execute(adquerystring,(user,STACK_SIZE)).fetchall(): ad = dict() for name in (NI, 'adid', 'rundateid', 'rundate', 'status'): copy(row, ad, name) for name in ('city', 'state'): copy(row, ad, name, quote_none=True) if stack and stack[0][NI] != ad[NI]: break stack.append(ad) but couldn't you change the query so that it only returns a single 'ni'? also, do you really want to break, or just skip the append? maybe you want: if not stack or stack[0]['ni'] == ad['ni']: stack.append(ad) or perhaps the 'ni' are sorted (in which case what you are doing makes some sense). andrew > -- > http://mail.python.org/mailman/listinfo/python-list > > -- http://mail.python.org/mailman/listinfo/python-list