>>> 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).