def nested_lookup(key, document): """Lookup a key in a nested document, return a list of values""" return list(_nested_lookup(key, document)) def _nested_lookup(key, document): """Lookup a key in a nested document, yield a value""" if isinstance(document, list): for d in document: for result in _nested_lookup(key, d): yield result if isinstance(document, dict): for k, v in document.items(): if k == key: yield v elif isinstance(v, dict): for result in _nested_lookup(key, v): yield result elif isinstance(v, list): for d in v: for result in _nested_lookup(key, d): yield result