La comprensión del diccionario de Python usando locals () da KeyError

>>> a = 1 >>> print { key: locals()[key] for key in ["a"] } Traceback (most recent call last): File "", line 1, in  File "", line 1, in  KeyError: 'a' 

¿Cómo puedo crear un diccionario con una comprensión como esta?

Una comprensión de dict tiene su propio espacio de nombres , y locals() en ese espacio de nombres no tiene a . Técnicamente hablando, todo, excepto el iterable inicial para el iterable más externo (aquí ["a"] ) se ejecuta casi como una función anidada con el iterable más externo pasado como un argumento.

Su código funciona si en su lugar usó globals() , o si creó una referencia al diccionario locals() fuera de la comprensión del dictado:

 l = locals() print { key: l[key] for key in ["a"] } 

Manifestación:

 >>> a = 1 >>> l = locals() >>> { key: l[key] for key in ["a"] } {'a': 1} >>> { key: globals()[key] for key in ["a"] } {'a': 1} 

Puedes intentar usar globals() lugar:

 print {key : globals()[key] for key in ["a"]} 

ya que a no está definido en el scope de la comprensión del dict (como dijo @MartijnPieters).