For each element in a list, finding the element in a second list, that minimizes a distance function
The approach is fine and this is exactly the purpose of the key attribute of min.

I’d just nitpick that the _ variable name is usually meant to indicate unused arguments and thus, using it inside the lambda goes against conventions.

Alternatively, you can make use of functools.partial which may yield better performances on larger lists:

[min(y, key=partial(d, a2=xindex)) for xindex in x]