FLexible formatted text involving nested lists?

Kerri Reno kreno at yumaed.org
Thu Oct 9 16:54:21 EDT 2008


Ross,

I'm no expert in python, so excuse me if this is inane.

What I would do is have fmts be a dictionary where
fmts = { 3 = 'oats %0d kilos over %0d days with %0d workers',
         2 = 'barley %0d lbs for %0d hours',
         1 = 'apples %0d baskets'}

then something like
  for x in bigList:
     print fmts[len(x)] % x

I didn't test this, but in theory it should work.

Hope this helps,
Kerri

On Thu, Oct 9, 2008 at 2:36 PM, RossRGK <nobody at nospam.noway> wrote:
> I'm having trouble getting my head around a solution for a situation where I
> need to flexibly format some text with a varying number of embedded fields.
>
> Here's a simplified description of my challenge...
>
> I have a list of lists called bigList:
>
> bigList = [ little, small, tiny]
>
> The sub-lists have varying sizes.  I won't know how many items they have but
> it will be between 0 and 3
>
> So perhaps little = [3, 2, 7]
> small = [6,4]
> tiny = [2]
>
> The values in those sub lists correspond to formatted print strings. The
> formatting strings will change over time and they are in a list called
> "fmts" where
>
> fmts = [fmtA, fmtB, fmtC]   where
>
> fmtA = 'oats %0d kilos over %0d days with %0d workers'
> fmtB = 'barley %0d lbs for %0d hours'
> fmtC = 'apples %0d baskets'
>
> If I knew how many fields were in each 'sub-list' in bigList ahead of time,
> and it never changed I could awkwardly do this:
>
> print fmtA %(little[0], little[1], little[2])
> print fmtB %(small[0], small[1])
> print fmtC %(tiny[0])
>
> or equivalently,
>
> print fmts[0] %(bigList[0][0], bigList[0][1], bigList[0][2])
> print fmts[1] %(bigList[1][0], bigList[1][1])
> print fmts[2] %(bigList[2][0])
>
> Both approaches would yield:
> oats 3 kilos over 2 days with 7 workers
> barley 6 lbs for 4 hours
> apples 2 baskets
>
>
> Now my challenge: since the number of fields is unknown at design time, my
> app needs to add be able to flexibly handle this.
>
> I though maybe I could use a loop that figures things out as it goes along.
> e.g...
>
> i=0
> for fmtString in fmts
>  numbOfFields = len(fmt[i])
>  print fmtString %(bigList[i][ need "for 0 to numbOffields" worth of
> indices!] )
>
> But I don't know how to have a number of items in the print expression that
> align to the numbOfFields value!?  Is there some other approach I can use?
>
> I thought perhaps it would accomodate extra elements in the %(...) part of
> the formatted print expression which would be ignored, but that doesn't
> work.
>
> Maybe I have to break my fmts up and do a field at a time?  Any thoughts are
> appreciated   :)
>
> -Ross.
> --
> http://mail.python.org/mailman/listinfo/python-list
>



-- 
Yuma Educational Computer Consortium
Compass Development Team
Kerri Reno
kreno at yumaed.org      (928) 502-4240
.·:*¨¨*:·.   .·:*¨¨*:·.   .·:*¨¨*:·.



More information about the Python-list mailing list