Naming
IMHO, "select" is not the appropriate name here, the more so because "select" is already used to describe the "successfully pick exactly 1 element out of a list" predicate select/3, which should be called "pick/3"...
The name "dict projection" sounds appropriate for this operation
Then the left dict could be called "small dict" and the right dict "big dict" (ok, where's my coat...)
Unit tests for "dict selection"
A simple application
Default parameters which may be overriden with a dict.
Make it usable in the head!
Head matching is based on =
always, one would have to invent new syntax to not used =
, but DictOfHead:<DictOfArgument
instead, possibly with anything leftover dumped into a Rest. Not sure whether this would make sense in all cases but it would certainyl be useful as the clause can be written by someone who doesn't know all the details of the passed-in dict.