-4

我想根据字典键创建一个变量。但是键可以是任何东西,所以我希望变量名与键的名称相匹配。

例如:

>>> dictA = {'foo': 5, 'abc' : 2}

我想要一个这样的变量。

>>> print foo
5
4

3 回答 3

4
print dictA['foo']

或者

foo = dictA['foo']
print(foo)
于 2013-10-05T05:27:40.987 回答
0

您可能想使用exec()

for i in dictA:
    exec(i+'='+str(dictA[i]))

但是,正如 hcwhsa 所说,真的不建议动态创建变量。它可能会导致很多问题,并且从字符串执行代码也非常不安全。

于 2013-10-05T06:35:34.393 回答
0

您可以像这样使用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 的回答。

于 2013-10-05T05:41:33.020 回答