如何将字典映射转换为 'integer aliasing'

How to convert dictionary mapping to 'integer aliasing'

我将如何完成以下操作?

>>> x={'NON_EPISODIC_MOVIE': 11}
>>> for k,v in x.items():
...     k=v
... 
>>> NON_EPISODIC_MOVIE
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'NON_EPISODIC_MOVIE' is not defined

基本上,我希望能够将字典映射转换为以下内容:

NON_EPISODIC_MOVIE = 11
...other items...

if content_type == NON_EPISODIC_MOVIE:
    # do something

这是如何通过 dict 完成的?

动态设置变量是一个真正可怕的想法,我数不清,但是 Python 给了你足够的绳索来搬起石头砸自己的脚!在交互式解释器提示下,它可能没有其他任何地方那么可怕...

>>> x={'NON_EPISODIC_MOVIE': 11}
>>> vars().update(x)
>>> NON_EPISODIC_MOVIE
11

适用于 Python 2 和 Python 3 交互式解释器。

更好的方法是将每一组这样的带值的名称保存在一个 class 中,作为它的命名空间。参见 http://code.activestate.com/recipes/52308-the-simple-but-handy-collector-of-a-bunch-of-named/ -- oldie,但 goldie,如果我自己这么说的话:-)。就说,例如

>>> movies = Bunch(**x)

并且全局变量将完好无损,但 movies.NON_EPISODIC_MOVIE 将是 11,"namespace pollution" 的风险为零(动态设置全局变量的大问题)...

>>> x={'NON_EPISODIC_MOVIE': 11}
>>> g = globals()
>>> for k, v in x.items():
...  g[k] = v
...
>>> NON_EPISODIC_MOVIE
11
>>>