I found an Emacs Lisp snippet today which might be useful:
(let ((choices '(("Baby Boomers" . "boomer") ("Generation X" . "x") ("Millennials / Generation Y" . "y") ("Zoomers / Generation Z" . "zoomer") ("Generation Alpha" . "hey, alpha!")))) (alist-get (completing-read "Your generation: " choices ) choices nil nil 'equal))
This way you can prompt the user to select an item from an association list ("alist") of choices, where the returned value is not the displayed key, but the value associated with that key. (Example: The user selects "Baby Boomers", but the returned value is "boomer".)
I found the origin of the snippet by following this trail:
Prompting With The Interactive Command
Emacs: Let's surround! - Prompt the user for inputs