2016-10-04 10 views
0

以下のコードでは、リスト 'anos'はユーザーによって定義され、任意の年数を取ることができます。Pythonのforループに変数を動的に割り当てる

しかし、 'anos'リスト内の1年ごとに、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]は、その後、ループのだろう場合:[a、b]は...のために、データは+ =ものみ使用しますと、b

したがって、3年などがあれば、リスト[a、b]は[a、b、c]になることがあります。その場合

、あなたはzipファイルに行の `行うことができます

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

関連する問題