Pythonically extract data from a list of tuples (getopt)

Mark Reed markjreed at gmail.com
Wed Apr 23 16:31:17 EDT 2008


So the return value from getopt.getopt() is a list of tuples, e.g.

>>> import getopt
>>> opts = getopt.getopt('-a 1 -b 2 -a 3'.split(), 'a:b:')[0]; opts
[('-a', '1'), ('-b', '2'), ('-a', '3')]

what's the idiomatic way of using this result?  I can think of several
possibilities.

For options not allowed to occur more than once, you can turn it into
a dictionary:

>>> b = dict(opts)['-b']; b
'2'

Otherwise, you can use a list comprehension:

>>> a = [arg for opt, arg in opts if opt == '-a']; a
['1', '3']

Maybe the usual idiom is to iterate through the list rather than using
it in situ...

>>> a = []
>>> b = None
>>> for opt, arg in opts:
...   if opt == '-a':
...     a.append(arg)
...   elif opt == '-b':
...     b = arg
...   else:
...     raise ValueError("Unrecognized option %s" % opt)

Any of the foregoing constitute The One Way To Do It?  Any simpler,
legible shortcuts?

Thanks.





More information about the Python-list mailing list