@J-Earls Prefer the generator function (using yield) over returning a generator expression, since generator expressions are anonymous. E.g. if there's an error, then in the traceback you get matching_keys (name) instead of <genexpr> (no name). Cf are named lambdas Pythonic?