Словарь и так по сути — partial mapping. Т.е. семантика отсутствия ключа в него уже заложена. Зачем сверху городить какую-то проверку, если можно при доставании получить Nothing, если ключ не найден?
Вот вы делаете функцию-конструктор, которая проверяет, что selected входит в ключи rest. Но вам придётся при каждом изменении cart это проверять — буквально при каждом! Потому что кто-то может поменять rest так, что selected "выпадет".