On Jan 9, 7:41 am, "Neil Cerutti" <[EMAIL PROTECTED]> wrote: > On Jan 9, 2008 5:34 AM, cesco <[EMAIL PROTECTED]> wrote: > > > Hi, > > > say I have a string like the following: > > s1 = 'hi_cat_bye_dog' > > and I want to replace the even '_' with ':' and the odd '_' with ',' > > so that I get a new string like the following: > > s2 = 'hi:cat,bye:dog' > > Is there a common recipe to accomplish that? I can't come up with any > > solution... > > > Thanks in advance > > Hum, hum... If I had a hammer... > > frompyparsingimport * > > word = Word(alphas) > sep = Literal('_').suppress() > pair = Group(word + sep + word) > pairs = delimitedList(pair, '_') > > print ','.join(':'.join(t) for t in > pairs.parseString('hi_cat_bye_dog').asList()) > > -- > Neil Cerutti <[EMAIL PROTECTED]>
My suspicious nature sees the following coming along... d1 = eval("{"+s2+"}") You can have pyparsing create the tuples for you, and then convert to a dict at the end with a constructor - no eval needed. from pyparsing import * word = Word(alphas) sep = Literal('_').suppress() pair = Group(word + sep + word).setParseAction(lambda toks: tuple(*toks)) pairs = delimitedList(pair, '_') print dict(pairs.parseString('hi_cat_bye_dog').asList()) Prints: {'bye': 'dog', 'hi': 'cat'} -- Paul -- http://mail.python.org/mailman/listinfo/python-list