我想根据字典键创建一个变量。但是键可以是任何东西,所以我希望变量名与键的名称相匹配。
例如:
>>> dictA = {'foo': 5, 'abc' : 2}
我想要一个这样的变量。
>>> print foo
5
我想根据字典键创建一个变量。但是键可以是任何东西,所以我希望变量名与键的名称相匹配。
例如:
>>> dictA = {'foo': 5, 'abc' : 2}
我想要一个这样的变量。
>>> print foo
5
print dictA['foo']
或者
foo = dictA['foo']
print(foo)
您可能想使用exec()
:
for i in dictA:
exec(i+'='+str(dictA[i]))
但是,正如 hcwhsa 所说,真的不建议动态创建变量。它可能会导致很多问题,并且从字符串执行代码也非常不安全。
您可以像这样使用exec
语句根据字典的键动态创建变量(只要键是有效的 python 变量名)。阅读更多关于exec
这里。
方法一
dictA = {'foo': 5, 'abc' : 2}
for variable, value in dictA.items():
exec(variable + " = " + str(value))
print foo, abc
输出
5 2
方法二
注意:当代码不在任何函数中时,此方法有效。
for variable, value in dictA.items():
locals()[variable] = value
或者
globals().update(dictA) # Suggestion by martineau in the comments
方法1非常危险。考虑一下dictA
。
dictA = {'foo': 5, 'abc' : '__import__("os").unlink("/etc/hosts")'}
exec
将执行 的值,abc
然后将值分配给变量abc
。结果:如果这是作为特权用户执行的,您将丢失/etc/hosts
文件。
推荐
两者都不使用。他们都是hackish方式。dict
照原样使用。请参阅@Tommy 的回答。