有没有办法将Python中的dict提取到本地命名空间?

时间:2010-02-23 08:45:35

标签: php python dictionary

PHP有一个名为extract()的函数,它将一个关联数组作为参数,并从其值分配给键值的键中创建局部变量。有没有办法在Python中执行此操作?快速的谷歌搜索没有立即告诉我如何。我怀疑exec()有一种方法,但如果有一些函数可以帮我做的话会很好。

4 个答案:

答案 0 :(得分:5)

由于not safe修改了locals()返回的字典

>>> d={'a':6, 'b':"hello", 'c':set()}
>>> exec '\n'.join("%s=%r"%i for i in d.items())
>>> a
6
>>> b
'hello'
>>> c
set([])

但是使用这样的exec很难看。您应该重新设计,这样您就不需要动态添加到本地命名空间

修改:请参阅Mike对评论中使用repr的保留意见。

>>> d={'a':6, 'b':"hello", 'c':set()}
>>> exec '\n'.join("%s=d['%s']"%(k,k) for k in d)
>>> id(d['c'])
3079176684L
>>> id(c)
3079176684L

答案 1 :(得分:3)

尝试:

    locals().update(my_dict)

编辑:

gnibbler提出了一个非常有效的观点,即不应该修改本地人(检查:http://docs.python.org/library/functions.html#locals)。尽管如此,Python文档并没有说它不安全,它只是说对本地人的改变可能不会影响变量的值。在回答我在Python的2.6 IDLE中尝试的问题之前,在全局范围和函数内部更新本地实际上都有效。这就是为什么我没有删除我的答案,而是我添加警告,它可能在某些(特定于平台的?)情况下工作,但不能保证。

答案 2 :(得分:-1)

我发现了一个类似的question已在SO上得到解答。接受的答案建议滚动你自己的python等效提取。

答案 3 :(得分:-1)

修改locals()dict可能是一个解决方案,但文档说,http://docs.python.org/library/functions.html#

  

注意这本词典的内容   不应该修改;变化可能   不影响本地和。的价值观   使用的自由变量   解释

所以问题是为什么你甚至需要它?无论你想要达到什么目的,都可能有更好的方法来实现。

为什么你不能直接访问dict或将它们分配给变量?