ваш для понимания списка возвращает СПИСОК карт, поэтому вам нужно ПРИМЕНИТЬ этот список к функции слияния в качестве необязательных аргументов:
user> (apply merge (for [[k v] record :when (not (nil? v))] {k v}))
{:b 2, :a 1}
Более краткое решение путем фильтрации картыкак последовательность и соединение в карту:
user> (into {} (filter second record))
{:a 1, :b 2}
Не удалять false значения:
user> (into {} (remove (comp nil? second) record))
{:a 1, :b false}
Использование disoc для разрешения постоянных данныхобщий доступ вместо создания новой карты:
user> (apply dissoc
record
(for [[k v] record :when (nil? v)] k))
{:a 1, :b 2}