Select as dictionary...

J. Clifford Dyer jcd at sdf.lonestar.org
Mon Oct 1 10:43:04 EDT 2007


On Mon, Oct 01, 2007 at 10:12:04AM -0400, Carsten Haese wrote regarding Re: Select as dictionary...:
> 
> On Mon, 2007-10-01 at 09:57 -0400, J. Clifford Dyer wrote:
> > > 
> > Try this:
> > 
> > aia.execute("SELECT id, w from list")
> > links=aia.fetchall()
> > linkdict = dict()
> > for k,v in links:
> >     linkdict[k] = v
> > print linkdict
> 
> Improvement 1: Use the fact that dict can be initialized from a sequence
> of key/value pairs:
> 
> aia.execute("SELECT id, w from list")
> linkdict = dict(aia.fetchall())
> 

This is only an improvement if the SQL query remains a list of 2-tuples.  If the OP wants to add more values, the more verbose version allows for easier extensibility.  

for k,v1,v2 in links:
	linkdict[k] = (v1, v2)

Of course even better would be not to have to add variables, so maybe:

for link in links:
	linkdict[link[0]] = link[1:],

which changes the output format somewhat, but keeps the access by dict keyed to the DB id.

> Improvement 2: Use an iterator instead of reading all rows into memory:
> 
> aia.execute("SELECT id, w from list")
> linkdict = dict(iter(aia.fetchone,None))
> 

Agreed.  A much better solution.

Cheers,
Cliff



More information about the Python-list mailing list