[portland] Nested for loops, 4 levels deep

Rich Shepard rshepard at appl-ecosys.com
Wed May 21 15:42:23 CEST 2008

On Tue, 20 May 2008, Dylan Reinhardt wrote:

> If I understand correctly, you want the data to lay out something like this:
> Wildlife
>       Fish
>               Abundance
>                       WFA1         if abundance is few then...
>                       WFA2         if abundance is moderate then...
>                       WFA3         if abundance is many then...


   This is correct. The rule number/rule text pairs will be in a table, but
that's a formatting detail.

> Assuming that to be the case, what about:
> for v in varList:
>    if row[0] == v[2] and s[1] == v[3]:
>        ivr.write(v[0])
>        ivr.write('\n''\n')
>        subitems = [tuple(item[-2:]) for item in varList if item[:3] == v[:3]]
>        for item in subitems:
>           ivr.write('\t%s\t%s\n' % item)
> Untested, obviously... but maybe that's close enough to be useful?

   I understand the list comprehension, but my modifications don't help. The
multiple pairs at the lowest level are in appData.rules, not in v[]. I tried
several variants, the latest being:

subitems = [tuple(item[-2:]) for item in appData.rules if appData.rules[2] == v[0]]

followd by 'print subitems', but only empty lists are printed. This is the
conundrum that set me chasing my tail the past couple of days: how to
iterate through the rows of appData.rules[] to pull out the appropriate last
two items in each tuple where the first three items have been specified.


More information about the Portland mailing list