On Mon, 11 Jul 2005 22:10:33 -0400, "Colin J. Williams" <[EMAIL PROTECTED]> wrote:
>The snippet of code below gives the result which follows > >for k in ut.keys(): > name= k.split('_') > print '\n1', name > if len(name) > 1: > name[0]= name[0] + name[1].capitalize() > print '2', name > name[0]= name[0].capitalize() > print '3', name > >1 ['logical', 'or'] >2 ['logicalOr', 'or'] >3 ['Logicalor', 'or'] > >I was expecting that 3 would read ['LogicalOr', 'or'] > >If I replace the above code with: > >for k in ut.keys(): > name= k.split('_') > print '\n1', name > if len(name) > 1: > name[0]= name[0].capitalize() + name[1].capitalize() > print '2', name > else: > name[0]= name[0].capitalize() > print '3', name > >I get the desired result. > If you walk through the results, you can see what happens to name[2] on output line 2: >>> 'logicalOr'.capitalize() 'Logicalor' I.e., >>> help(str.capitalize) Help on method_descriptor: capitalize(...) S.capitalize() -> string Return a copy of the string S with only its first character capitalized. ^^^^-- meaning all the rest lowercased, which changed your trailing 'Or' So, doing .capitalize on all the pieces from split('_') and then joining them: >>> def doit(w): return ''.join([s.capitalize() for s in w.split('_')]) ... >>> doit('logical_or') 'LogicalOr' >>> doit('logical') 'Logical' >>> doit('logical_or_something') 'LogicalOrSomething' >>> doit('UP_aNd_down') 'UpAndDown' Regards, Bengt Richter -- http://mail.python.org/mailman/listinfo/python-list