2015-11-27 119 views
1

我想要做一个循环来将colums添加到现有变量(有10到15个变量称为option0,option1,... optionn)。每个选项变量都有自己的列,但我需要为每个变量添加更多的列。一个接一个做是无用的,用一个循环来做,不起作用。 举例option0:将colums添加到变量列表

option0['Risk_rate'] = rfr.column[0] 

例为N个选项:

for opt in range(0, len(aapl.expiry_dates)): 
    ['option%s' % opt['Risk_rate']] = rfr.column[0] 

一个适当的提示会很方便,可以节省我很多inneficient代码!

+1

没有编号的'option'变量。把它们放在一个列表中,这样你就可以通过索引来访问它们。 –

+0

为什么不把所有optionX变量放到列表中并迭代它,以这种方式向它们添加新数据? – Maciek

回答

1

,以便在评论menthioned你最好的变量,而不是不同的命名变量list。在这种情况下,代码将是:

options = [dict() for i in range(number_of_options_you_need)] 
#use options[0] instead of options0 

#to set new key-value to all options 
for opt in options: 
    opt['Risk_rate'] = some_new_value 
+0

谢谢!这正是我一直在寻找,但确实知道如何去做或以合适的方式询问谷歌! – nemi

0

使用元编程:

foo0 = {} 
foo1 = {} 
foo2 = {} 

for i in range(3): 
    exec("foo{}['bar'] = 'baz'".format(i)) 
    exec('print(foo{})'.format(i)) 
+2

不,''exec'是最后一招的工具。这是缓慢和潜在的危险。请参阅[为什么要避免使用exec()和eval()?](http://stackoverflow.com/q/1933451/4014959)。 –

+0

尽管我喜欢你的想法的方法和创意,但我认为这不是最简单的问题。如果开发人员知道要更新哪些集合,最好将它们保存在某种集合中,并遍历该集合以更新它们。另外,我想这会快得多,因为'exec'为一项非常简单的任务做了很多工作。 – Maciek

+0

如果你知道你在做什么,没问题。根据情况,最好使用需要更多处理的东西,比如exec,而不是复杂的编写和维护。此外,优化并不总是设计要求。而且,在这种情况下,exec没有安全漏洞,因为要执行的字符串不是由用户决定的。 – Macabeus