2015-11-27 56 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