On Wed, Oct 24, 2007 at 12:09:40PM -0000, Alexandre Badez wrote regarding Better writing in python: > > lMandatory = [] > lOptional = [] > for arg in cls.dArguments: > if arg is True: > lMandatory.append(arg) > else: > lOptional.append(arg) > return (lMandatory, lOptional) > > I think there is a better way, but I can't see how... >
I assume cls.dArguments is a dict, correct? `for arg in cls.dArguments` takes each *key* for cls.dArguments and assigns it to arg, so the line 'if arg is True' will test the truth value of each key. I assume (you haven't shown the details here) that your dict looks like this: cls.dArguments = { 'a': True, 'b': False, 'c': True, 'd': False, '': True, 0: False } and you want your for loop to do this: lMandatory == [ 'a', 'c', '' ] lOptional == [ 'b', 'd', 0 ] in fact, since it's testing the truth value of the keys, not the values, you will get this: lMandatory == [ 'a', 'b', 'c', 'd' ] lOptional == [ '', 0 ] In no particular order, of course. Also, `if x is True:` should be written as `if x:` Actually, come to think of it, what I said above is false, because the string 'a' *is not* the boolean value True, per se: it is *equal to* True. So if you change `if x is True:` to `if x == True:` then everything I said above holds true, including that you should change `if x == True:` to `if x:` As it stands, the only key in your dict that has a snowball's chance in key largo of being marked as mandatory is the boolean value True itself. Cheers, Cliff -- http://mail.python.org/mailman/listinfo/python-list