我有一个列表list = ['foo','bar']
,现在我想从每个项目创建一个字符串。
每个字符串都被命名为项目,并具有项目的值
foo ='foo' bar ='bar'
感谢所有人,我将改用dict
答案 0 :(得分:9)
不要那样做。改为使用dict。
strings = dict((x, x) for x in L)
答案 1 :(得分:3)
Ignacio Vazquez-Abrams是对的,使用dict更好。但如果你坚持让它们作为变量可用,你可以随时这样做:
strings = dict((x, x) for x in L)
locals().update(strings)
PS:Edan Maor的exec
版本存在安全问题。它不会处理["foo", "';__import__('os').system('rm -rf ~');'"]
,例如:)
答案 2 :(得分:1)
尝试:
>>> l = ["foo", "bar"]
>>> for item in l:
exec("%s = '%s'" % (item, item))
注意:为什么需要这个?你确定这是做你想做的最好的方式吗?我问,因为这通常不是一个好主意。
安全警告:正如AttilaOláh所指出的,使用“exec”运行任意代码是一个非常糟糕的主意。只有在你控制列表中的字符串时才使用它(例如,它们不是来自用户的输入)。
答案 3 :(得分:0)
尽管名称不同,但Python中的变量实际上并不是变量。如果您要将数据与“名称”相关联,则应使用dict代替:
data = {}
for s in ['foo', 'bar']:
data[s] = s
有时候(!)可以修改locals()来引入新的变量,但是由于你没有明智的方式来引用它们(因为你在编写代码时不知道它们的名字),所以真的没有它的价值。它所做的只是使你的代码 lot 更慢,更难理解。
答案 4 :(得分:0)
查看http://docs.python.org/library/functions.html#setattr
你应该能够按照
的方式做点什么for x in list:
setattr(object, x, x)
假设object是你想要添加属性的任何对象。