> Here is my real code: > > with > dArguments = { > 'argName' : { > 'mandatory' : bool, # True or False > [...], # other field we do not care here > } > } > > lMandatory = [] > lOptional = [] > for arg in cls.dArguments: > if cls.dArguments[arg]['mandatory']: > lMandatory.append(arg) > else: > lOptional.append(arg) > return (lMandatory, lOptional)
I'm kinda confused, as you're iterating over cls.dArguments, so arg appears to be a dictionary (addressable with ['mandatory']), but then you're using it (the arg dictionary) as a key into cls.dArguments which seems suspect. I suspect you want to do something like for arg in cls.dArguments: if arg['manditory']: lMandatory.append(arg) else: lOptional.append(arg) return (lMandatory, lOptional) I've done something like this in the past: def partition(i, f): # can be made into list-comprehensions instead if iters return (x for x in i if f(x)), (x for x in i if not f(x)) odds,evens = partition(xrange(10), lambda x: x & 1) print "Odd numbers:" for thing in odds: print thing print "Even numbers:" for thing in evens: print thing which could be translated in your case to something like return partition(cls.dArguments, lambda x: x['manditory'] ) I don't know if you find it "more pythonic" or easier to read (which in a way is an aspect of "more pythonic"), but in some cases, I find this fits my brain better. -tkc -- http://mail.python.org/mailman/listinfo/python-list