my objective is to remove from know_keys what is in both known keys and new_req
given:

    >>> ls = set([1, 2, 3, 4])
    >>> rs = set([3, 5, 7])

your suggestion of set intersection (&) is only half the job.

    >>> ls & rs
    set([3])

once I identify what is in both, I then do set difference to get what is not in both.

    >>> ls.difference(ls.intersection(rs))
    set([1, 2, 4])

new keys are discovered in the outer most loop