¿La forma más python de asignar argumentos de palabras clave utilizando una variable como palabra clave?

¿Cuál es la forma más pirónica de solucionar el siguiente problema? Desde la shell interactiva:

>>> def f(a=False): ... if a: ... return 'a was True' ... return 'a was False' ... >>> f(a=True) 'a was True' >>> kw = 'a' >>> val = True >>> f(kw=val) Traceback (most recent call last): File "", line 1, in  TypeError: f() got an unexpected keyword argument 'kw' 

Por el momento me estoy moviendo con lo siguiente:

 >>> exec 'result = f(%s=val)' % kw >>> result 'a was True' 

pero parece bastante torpe …

(Cualquiera de las soluciones de Python 2.7+ o 3.2+ están bien)

    Utilice el argumento de palabras clave desempaquetado :

     >>> kw = {'a': True} >>> f(**kw) <<< 'a was True' 

    En muchas circunstancias puedes usar

     f(kw) 

    como argumentos de palabras clave no tienen que especificarse como palabras clave, si especifica todos los argumentos antes de ellos.

    Python 3 tiene una syntax para los argumentos de palabra clave solamente , pero eso no es lo que son de forma predeterminada.

    O, basándose en la respuesta de @zeekay,

     kw = 'a' f(**{kw: True}) 

    si no desea almacenar kw como un dict, por ejemplo, si también lo está utilizando como clave en una búsqueda de diccionario en otro lugar.