1
resposta

Trabalhando com Listas e Dicionários

Olá, pessoal! Estou fazendo alguns teste para processar o resultado da API de localização de ônibus da prefeitura do Rio, que entrega o seguinte JSON:

{
    "COLUMNS": ["DATAHORA", "ORDEM", "LINHA", "LATITUDE", "LONGITUDE", "VELOCIDADE"],
    "DATA": [
        ["02-17-2020 21:23:28", "A50084", 301.0, -22.92901, -43.25412, 0.0],
        ["02-17-2020 21:23:49", "A50017", 301.0, -22.96014, -43.39546, 0.0],
        ["02-17-2020 21:25:17", "A50009", 301.0, -22.92908, -43.25431, 0.0],
        ["02-17-2020 21:26:34", "C50014", 301.0, -22.92968, -43.25362, 1.0],
        ["02-17-2020 21:33:41", "A50005", 301.0, -22.92874, -43.25413, 0.0],
        ["02-17-2020 21:40:27", "A50079", 301.0, -22.92889, -43.2542, 0.0],
        ["02-17-2020 21:42:45", "A50141", 301.0, -22.98372, -43.29715, 38.0],
        ["02-17-2020 21:43:28", "C50152", 301.0, -22.92917, -43.25398, 0.0],
        ["02-17-2020 21:43:31", "A50143", 301.0, -22.95943, -43.38751, 0.0],
        ["02-17-2020 21:43:31", "C50035", 301.0, -22.90246, -43.20823, 19.0],
        ["02-17-2020 21:43:33", "A50026", 301.0, -22.92384, -43.22805, 8.0],
        ["02-17-2020 21:43:34", "C50053", 301.0, -22.92358, -43.25028, 34.0],
        ["02-17-2020 21:43:39", "C50059", 301.0, -22.95094, -43.26192, 17.0],
        ["02-17-2020 21:43:39", "C50171", 301.0, -22.95946, -43.38684, 0.0],
        ["02-17-2020 21:43:41", "A50080", 301.0, -22.92922, -43.25387, 0.0],
        ["02-17-2020 21:43:43", "C50149", 301.0, -22.91186, -43.23402, 44.0],
        ["02-17-2020 21:43:45", "C50108", 301.0, -22.95953, -43.38648, 0.0],
        ["02-17-2020 21:43:49", "C50092", 301.0, -22.92919, -43.25384, 0.0],
        ["02-17-2020 21:43:50", "A50222", 301.0, -22.92934, -43.25355, 0.0],
        ["02-17-2020 21:43:50", "C50039", 301.0, -22.9325, -43.24065, 3.0],
        ["02-17-2020 21:43:50", "C50147", 301.0, -22.90901, -43.22317, 39.0],
        ["02-17-2020 21:43:50", "C50170", 301.0, -22.96453, -43.27688, 0.0],
        ["02-17-2020 21:43:51", "A50075", 301.0, -22.90187, -43.20817, 7.0],
        ["02-17-2020 21:43:54", "A50221", 301.0, -22.90716, -43.21367, 38.0],
        ["02-17-2020 21:43:57", "C50061", 301.0, -22.96004, -43.39588, 0.0]
    ]
}

Nessa saída temos um Dicionário que contém COLUMNS e DATA, a informação relevante está em uma lista, dentro de DATA, para isso eu fiz o seguinte código:

r = requests.get(url_prefeitura)
dados = r.json()
entradas = dados['DATA']
   for i in entradas:
      campo=i[0:1]

até ai blz, consegui pegar o campo de data em hora, porém dentro de uma OUTRA lista. Assim, para conseguir pegar cada um dos campos em string ou float, eu precisei fazer o seguinte mecanismo:

r = requests.get(url_prefeitura)
dados = r.json()
entradas = dados['DATA']
for i in entradas:
  campo=i[0:1]
  for item in campo:
    data_hora = item
  campo=i[1:2]
  for item in campo:
    ordem = item
  campo=i[2:3]
  for item in campo:
    linha = item
  campo=i[3:4]
  for item in campo:
    latitude = item
  campo=i[4:5]
  for item in campo:
    longitude = item
  campo=i[5:6]
  for item in campo:
    velocidade = item

Com isso o resultado final foi satisfatório.

A minha pergunta é: vocês enxergam alguma forma mais otimizada de fazer esse processo?

Obrigado!

1 resposta

Oii Tales, tudo bem com você?

O resultado final seria a mostragem dos dados?

Do modo como você fez, a sequência de for interno é desnecessária, uma vez que o slice da lista irá retornar apenas um elemento. Você poderia simplificar fazendo o seguinte:

for i in entradas:
  data_hora=i[0:1]
  ordem=i[1:2]
  linha=i[2:3]
  latitude=i[3:4]
  longitude=i[4:5]
  velocidade=i[5:6]
  print(data_hora[0], ordem[0], linha[0], latitude[0], longitude[0], velocidade[0])

Porém, uma maneira ainda mais simplória de fazer o que você fez é usar o unpacking da lista. Sabemos que dentro for teremos uma lista, certo? E nessa lista temos 6 itens, então podemos desestruturar essa lista de uma só vez. Veja:

for lista in entradas:
    data_hora, ordem, linha, latitude, longitude, velocidade = lista
    print(data_hora, ordem, linha, latitude, longitude, velocidade)

Qualquer dúvida é só falar, estou a disposição. Abraços e bons estudos!