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