Emacs lisp list grouping

My attempt:

(let* ((data '((name (tag1))
               (name2 (tag2))
               (name3 (tag1))
               (name4 (tag3))
               (name5 (tag2 tag1)))))
  (mapcar (lambda (tag)
            `(,tag ,(delete nil
                            (mapcar (lambda (item)
                                      (when (member tag (cadr item))
                                        (car item)))
                                    data))))
          (delete-dups (flatten-tree (mapcar #'cdr data)))))
2 Likes