A shorter version, functionally equivalent to yours: def dict_zip(*dicts): return {k: [d[k] for d in dicts] for k in args[0].keys()} That's assuming all dicts have the same keys, or more exactly, all dicts have at least all the keys present in the first dict. To make it more robust and handle cases when dicts don't have the same keys: def dict_zip(*dicts): all_keys = {k for d in dicts for k in d.keys()} return {k: [d[k] for d in dicts if k in d] for k in all_keys} Regarding type hints: not sure, but it might be something based on [typing.MutableMapping](https://docs.python.org/3.5/library/typing.html#typing.MutableMapping). But that's **Python 3**.