Динамически распределять переменные в цикле for в python

#python #loops #tuples #itertools

#python #циклы #кортежи #python-itertools

Вопрос:

В приведенном ниже коде список ‘anos’ определяется пользователем и может занимать произвольное количество лет.

Однако для каждого года в списке ‘anos’ в начале цикла FOR должна быть назначена новая переменная. Если anos = [‘2008’, ‘2009], тогда цикл for будет иметь вид: for [a,b].. и данные = также будут использовать только 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. вы могли бы сделать for row in zip(*anos_tuple) where row — это список. row[0] является a, row[1] является b и так далее…

Ответ №1:

Если anos = [‘2008’, ‘2009], тогда цикл for будет иметь вид: for [a,b] .. и данные = также будут использовать только a и b

Таким образом, список [a, b] может стать [a, b, c], когда пройдет 3 года и так далее.

В этом случае переведите ваш последний цикл 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 ])
  

Комментарии:

1. Спасибо. это работает! Я уже потратил на это так много времени. Спасибо!