如何将字典映射转换为 '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
>>>
我将如何完成以下操作?
>>> 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
>>>