Python 错误:TypeError:列表索引必须是整数或切片,而不是 str

我在这一行收到此错误:valor_mensal_aux[i] = int(data['Dados'][0][json_date][0]['valor'])


我尝试在这里发布一些代码,以便你们可以获得所有变量的上下文:


if len(imobs) == 0:


   year_codes = ["2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020"]


   month_codes = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]


   city_codes = ["1111609", "1120303", "11A1312", "11D1714", "11E0402", "16D0105", "16E0603", "16F1009", "16G1823",

                 "16H0502", "16J0907", "1701106", "1701512", "1840205", "1851416", "1861214", "1870705", "1500805"]


   valor_mensal_aux = [0]

   valor_anual = [0][0]

   # valor_anual_ano_inicial = [18] # array com valor anual de cada cidade para ano inicial

   # valor_anual_ano_final = [18] # array com valor anual de cada cidade para ano final


   for city_code in city_codes:


       for year_code in year_codes:


           for month_code in month_codes:


               url_imob = Request(

                   "https://www.ine.pt/ine/json_indicador/pindica.jsp?op=2&varcd=0010042&Dim1=S3A" + year_code + \

                   month_code + "&Dim2=" + city_code + "&Dim3=T&lang=PT", headers={'User-Agent': 'XYZ/3.0'})

               json_date = year_code + month_code

               response = urlopen(url_imob)

               data = json.loads(response.read())

               i = 0

               while i < 12:

                   valor_mensal_aux[i] = int(data['Dados'][0][json_date][0]['valor'])

                   i += 1


           valor_anual[data['geodsg']][year_code] = statistics.mean(valor_mensal_aux)


           python_imob = Imob(year_code, valor_anual[city_code][year_code], data['DataUltimoAtualizacao'],

                              data['Dados'][json_date]['geodsg'])

           session.add(python_imob)  

           session.commit()

           session.close()

           imobs = session.query(Imob).all() 

我可以改变什么来解决它?我希望这行代码之后不再有错误:)


人到中年有点甜
浏览 129回答 1
1回答

慕神8447489

我尝试访问相关网页,从 JSON 响应加载的典型对象如下所示:[{'Dados': {'201101': [{'dim_3': 'T',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'dim_3_t': 'Total',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'geocod': '1111609',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'geodsg': 'Viana do Castelo',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'valor': '779'}]},&nbsp; 'DataExtracao': '2020-09-03T14:21:27.691+01:00',&nbsp; 'DataUltimoAtualizacao': '2020-08-27',&nbsp; 'IndicadorCod': '0010042',&nbsp; 'IndicadorDsg': 'Valor mediano de avaliação bancária (€/ m²) por Localização '&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'geográfica (Município - 2013) e Tipo de construção; Mensal '&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '- INE, Inquérito à avaliação bancária na habitação',&nbsp; 'MetaInfUrl': 'https://www.ine.pt/bddXplorer/htdocs/minfo.jsp?var_cd=0010042&lingua=PT',&nbsp; 'UltimoPref': 'Julho de 2020'}]这意味着您需要像这样访问它:data[0]['Dados'][json_date][0]['valor']相反,你有:data['Dados'][0][json_date][0]['valor']您还会遇到尝试分配列表末尾以外的问题。你可能想要这样的东西:&nbsp; &nbsp; &nbsp; &nbsp;for year_code in year_codes:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;valor_mensal_aux = []&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for month_code in month_codes:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ......&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; valor_mensal_aux.append(int(data[0]['Dados'][json_date][0]['valor']))并且不要i在月份循环内循环 - 每个月只附加一次。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python