getoptの戻り値をグループ化

こういうのが欲しい。

# hoge.py
import sys
import getopt
import itertools

opts, argv = getopt.getopt(sys.argv[1:], 'x:y:z:')

keyfunc = lambda item: item[0]
opts = sorted(opts, key=keyfunc)
opts = itertools.groupby(opts, key=keyfunc)
opts = [(k, list(vv for _, vv in v)) for k, v in opts]
opts = dict(opts)

import pprint
pprint.pprint(dict(opts=opts, argv=argv))
$ python hoge.py -x5 -y6 -x7 -y8 -z9 -x0 foo bar baz
{'argv': ['foo', 'bar', 'baz'],
 'opts': {'-x': ['5', '7', '0'], '-y': ['6', '8'], '-z': ['9']}}

optsの合成がもっとスマートに出来ないものか。