[Tutor] Iterating over nested lists part2
Kent Johnson
kent37 at tds.net
Sun Jul 3 04:49:53 CEST 2005
Luis N wrote:
> def listItems():
> l= []
> d = {}
> for r in range(len(vw)):
> for x in range(lt):
> ed = desc[x]
> exec("d['%s']=vw[%d].%s" % (ed,r,ed))
> l.append(d)
> print l
If I understand correctly, you want to take all the rows of the view and turn them into dicts, and build a list of all the dicts. If so, the code above is way too complex.
First, you can iterate over a list such as vw directly, you don't have to iterate the indices. Instead of
for r in range(len(vw)):
do something with vw[r]
you just say
for vwitem in vw:
do something with vw
Next, instead of exec you should use getattr(). To put the value into d you don't need either; you can assign to d[ed] directly. To get the 'ed' attribute from vwitem, use getattr(vwitem, ed).
I also moved the assignment to d inside the loop so you start each row with a fresh dictionary. Here is the result:
def listItems():
l= []
for vwitem in vw:
d = {}
for ed in desc:
d[ed] = getattr(vwitem, ed)
l.append(d)
print l
Kent
More information about the Tutor
mailing list