在python

时间:2016-10-04 10:50:50

标签: python loops tuples itertools

在下面的代码中,列表' 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']])

1 个答案:

答案 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 ])