从for循环中的字典键创建python中的动态变量

时间:2016-12-15 04:23:25

标签: python python-3.x

我有这个程序

dict1={
         'x':1,
         'y':[10,20]
   }

   for each in list(dict1.keys()):
       exec(each=dict1["each"])
#exec('x=dict["x"]')
#exec('y=dict["y"]')
print(x)
print(y)

我真正想要的是这个

exec('x=dict1["x"]')  ##commented part
exec('y=dict1["y"]')  ##commented part

无论我在评论部分做什么,我想做loop.so,预期的输出应该是

1
[10,20]

但它给出了错误。 想要将dictionay键创建为变量和值作为varialbe值。 但没有锁。任何人都可以建议我如何实现或不可能?

2 个答案:

答案 0 :(得分:3)

你想要的是

for each in dict1.keys():
    exec(each + "=dict1['" + each +"']")

这是否是一件好事,是另一个问题。

答案 1 :(得分:2)

您可以使用globals()或locals()而不是exec,具体取决于这些变量的使用范围。

使用globals()

的示例
>>> x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>>
>>> y
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'y' is not defined
>>>
>>> dict1={
...          'x':1,
...          'y':[10,20]
...    }
>>> dict1
{'y': [10, 20], 'x': 1}
>>> for k in dict1:
...   globals()[k] = dict1[k]
...
>>> x
1
>>> y
[10, 20]
>>>

使用locals()

的示例
>>> x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> y
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'y' is not defined
>>> dict1={
...          'x':1,
...          'y':[10,20]
...    }
>>> dict1
{'y': [10, 20], 'x': 1}
>>> for k in dict1:
...   locals()[k] = dict1[k]
...
>>> x
1
>>> y
[10, 20]
>>>