You can use ** syntax:
>>> english = {'hello':'hello'}
>>> s.format(**english)On Sep 14, 9:59 am, Andre Alexander Bell <[email protected]> wrote: > Hello, > > I'm used to write in Python something like > > >>> s = 'some text that says: %(hello)s' > > and then have a dictionary like > > >>> english = { 'hello': 'hello' } > > and get the formatted output like this: > > >>> s % english > > Occasionally I want to extract the field names from the template string. > I was used to write a class like > > class Extractor(object): > def __init__(self): > self.keys = [] > def __getitem__(self, key): > self.keys.append(key) > return '' > > and use it like this: > > >>> e = Extractor() > >>> res = s % e > >>> e.keys > ['hello'] > > Now Python has the format method for string formatting with the more > advanced handling. So I could as well write > > >>> s = 'some text that says: {hello!s}' > >>> s.format(hello='hello') > > My question is, if I do have a string template which uses the newer > format string syntax, how do I best extract the field information? > > I found the str._formatter_parser() method which I could use like this: > > keys = [] > for (a, key, c, d) in s._formatter_parser(): > if key: > keys.append(key) > > Is there a more elegant solution? > What are a, c, d? > Where can I find additional information on this method? > Should one use a method that actually starts with an _? > Couldn't this one change any time soon? > > Thanks for any help > > Andre -- http://mail.python.org/mailman/listinfo/python-list
