[EMAIL PROTECTED] a écrit : > hi > in my code, i use dict(a) to make to "a" into a dictionary , "a" comes > from user input, so my program does not know in the first place. Then > say , it becomes > > a = { '-A' : 'value1' , '-B' : "value2" , "-C" : "value3" , '-D' : > 'value4' } > > somewhere next in my code, i will check for these..: > > 1) -A and -B cannot exist together > 2) -A and -C cannot exist together > 3) -A and -B and -D cannot exist together > 4) and lots of other combinations to check for....
Looks like an option parser... If so, there's all you need in the standard lib (look for the optparse module). > > how can i efficiently check for the above? At first as i do simple > checks , i use if and else. > But as i began to check for more combinatoiuns, it gets messy.... First : use boolean logic (truth table, Kernaugh diagram, etc) to simplify things. As an example, rule #3 is useless - it's a subset of rule #1 (-A and -B and -D implies -A and -B). This should greatly reduce the number of needed tests. Then, write a simple rule system describing either valid inputs or invalid inputs (preferably the smallest set !-). FWIW, it can be as simple as a list of lambdas/error messages pairs, with lambdas being predicate taking dict keys as params: _RULES = [ (lambda keys : '-A' in keys and '-B' in keys, "can't have both options -A and -B"), (lambda keys : '-A' in keys and '-C' in keys, "can't have both options -A and -C"), # etc... ] def validate(options, rules): keys = options.keys() for predicate, message in rules: if not predicate(keys): raise ValueError(message) -- http://mail.python.org/mailman/listinfo/python-list