在下面的代码中,列表' anos'应由用户定义,并可以采取任意数年。
但是,对于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 :(得分:1)
如果anos = [' 2008',' 2009],那么for循环将是:for [a,b] ..而data + =也只会使用a和b
所以当有3年时,列表[a,b]可以变成[a,b,c]等等。
在这种情况下,将你的最后一个for循环翻译成
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 ])