La comprensión del diccionario con funciones lambda da resultados incorrectos

Intenté el siguiente código en Python 3.5.1:

>>> f = {x: (lambda y: x) for x in range(10)}
>>> f[5](3)
9

Es obvio que esto debería volver5. No entiendo de dónde viene el otro valor, y no pude encontrar nada.

Parece que es algo relacionado con la referencia: siempre devuelve la respuesta def[9], que es la última función asignada.

¿Cuál es el error aquí y cómo debe hacerse para que funcione correctamente?

Respuestas a la pregunta(2)

Su respuesta a la pregunta