2016-10-04 110 views
0

在下面的代碼中,列表'anos'應該由用戶定義並且可以採用任意年數。在python中爲for循環動態分配變量

但是,對於'anos'列表中的每一年,都必須在FOR循環的開始處分配一個新變量。如果anos = ['2008','2009],那麼for循環將是:for [a,b] ..和data + =也只會使用a和b。

是否有可能動態分配這些變量取決於'anos'列表項的數量? FOR函數接受它還是必須使用itertools中的另一個工具?

def gv(var): 
dd, aa, bb, cc, anos = {}, [], {}, {}, ['2006','2007','2008','2009','2010','2011','2012','2013','2014','2015'] 

for i in anos: 
    resp = requests.get('http://www.sidra.ibge.gov.br/api/values/t/1612/n3/all/v/'+var+'/p/' + i + '/C81/2713/f/c') 
    dd[i] = json.loads(resp.text.encode('utf8')) 

anos_tuple = tuple((dd[i]) for i in anos) #ie: (dd['2006], dd['2007']...) 

for [a,b,c,d,e,f,g,h,i,j] in zip(*anos_tuple): # uma letra para cada ano 
    data = a['D1C'] 
    data += ','.join([a['V'], b['V'], c['V'], d['V'], e['V'], 
         f['V'], g['V'], h['V'], i['V'], j['V']]) 
+0

你可以在拉鍊做'了行(* anos_tuple)''那裏是row'名單。 'row [0]'是a,'row [1]'是b等等...... – algrebe

回答

1

如果ANOS = [ '2008',「2009],然後for循環將是:對於[A,B] ..和數據+ =也會只使用A和B

因此,如果有3年,列表[a,b]可以變成[a,b,c]等等。

在這種情況下,翻譯你持續循環到

for row in zip(*anos_tuple): 
    # a is row[0] 
    data = row[0]['D1C'] 

    # a['V'], b['V'] etc is row[0]['V'], row[1]['V'] 
    data += ','.join([ i['V'] for i in row ]) 
+0

謝謝。有用!我已經花了很多時間了。謝謝! – relima