从字典键在for循环中创建Python动态变量

3
我有这个程序。
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

我想在注释部分所做的内容在for循环中完成。这样,期望的输出结果应该是

1
[10,20]

但是出现了错误。我想创建字典,将键作为变量,将值作为变量值。但没有成功。有人能建议我如何实现吗?或者这不可能吗?


你能更好地解释一下你想做什么吗? - Jacob G.
1
你想要用字典中定义的键名来填充全局命名空间中的变量?听起来不太好。请参考这个问题,了解可能的替代方案 - https://dev59.com/A3E85IYBdhLWcg3w03Dz - Andrew Guy
2个回答

4
你想要的是:
for each in dict1.keys():
    exec(each + "=dict1['" + each +"']")

无论这是否是一个好的愿望,还需要再考虑。

4
您可以使用 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]
>>>

这个更受欢迎,因为它避免了 exec。在本地变量的情况下重新转换答案(最安全的方法):for k, v in dict1.items(): locals()[k] = v - Zephaniah Grunschlag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接