On Dec 2, 1:35 pm, Donn Ingle <[EMAIL PROTECTED]> wrote: > Hi, > I'm sure I one read somewhere that there is a simple way to set the order > of replacements withing a string *without* using a dictionary. > > What I mean is:>>> s = "%s and %s" % ( "A", "B" ) > >>> print s > > A and B > > Now, is there something quick like:>>> s = "%s/2 and %s/1" % ( "A", "B" ) > >>> print s > > B and A > > ? > > I know it can be done with a dict: > d = { "one" : "A", "two" : "B" } > s = "%(two)s and %(one)s" % d > > \d
One quick solution is to write a function for it: def format(template, values): import re # Collect the indexes from the template. order = map(int, re.findall(r'%\[(\d+)\]', template)) # Remove the indexes from the template. template = re.sub(r'(?<=%)\[(\d+)\]', '', template) # Create a tuple containing the values in the correct positions. values = tuple(values[index] for index in order) return template % values >>> format("%[0]s and %[1]s", ("A", "B")) 'A and B' >>> format("%[1]s and %[0]s", ("A", "B")) 'B and A' -- http://mail.python.org/mailman/listinfo/python-list