(use srfi-1) (define mylist '((key1 . peanut) (key2 . butter) (key3 . jelly) (key4 . time) (key5 . (1 2 3 4)))) (define (non-nested-keys alist #!optional fields keep?) (let ((keys (remove null? (map (lambda (curr-key) (if (not (list? (alist-ref curr-key alist))) curr-key '())) (map car alist))))) (if (null? fields) keys (if keep? (lset-intersection eq? fields keys) (lset-difference eq? keys fields))))) ;; Get keys (non-nested-keys mylist) ;; Get only keys matching desired (non-nested-keys mylist '(key2 key234565 key4) #t) ;; Remove the following keys and return everything else (non-nested-keys mylist '(key2 key234565 key4) #f)