es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema de iteración de bucle For en Python que itera X veces los valores de una lista.

lista = [(UK,1),(USA,2),(UAE,3)]
def obtenerdatos():
  base_url = 'someurl.com'
  parametros = {nombrepais : pais}
  resp = requests.requests('GET', base_url+parametros).json()

def subir():
 codigo de inserción sql
for x in lista:
   pais = lista[0]
   ID = lista[1]
   obtenerdatos()
   subir()

El código anterior funciona bien. El problema es que, debido a que hay tres tuplas, el SQL subirá los datos 3 veces. Si tengo cinco tuplas, subirá los datos cinco veces. Intenté con listas anidadas, pero no tuve suerte.

Mi intención es que, una vez que se inserte UK en el parámetro JSON, se obtengan los datos, se asigne el ID/índice y se suban a SQL los dos valores. Luego, se repetirá el proceso para el siguiente país.

Lo que debería obtener es:

Country | ID | value
| —– | — | —-
UK | 1 | 50
US | 2 | 100
UAE | 3 | 75

Lo que estoy obteniendo es:

Country | ID | value
| —– | — | —-
UK | 1 | 50
UK | 1 | 50
UK | 1 | 50
US | 2 | 100
US | 2 | 100
US | 2 | 100
UAE | 3 | 75
UAE | 3 | 75
UAE | 3 | 75

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema con la implementación actual es que toda la lógica de fetchdata() y upload() está encerrada dentro del bucle for que itera sobre la lista de tuplas. Esto hace que los datos se obtengan y se suban para cada tupla en la lista.

    Para lograr el comportamiento deseado de obtener datos para cada país, asignar ID/índice y subir esos datos a SQL solo una vez, el bucle solo debería iterar sobre la lista de tuplas para obtener el país y el ID/índice relevantes. La lógica de fetchdata() y upload() debería ser llamada utilizando esos valores.

    Aquí hay un fragmento de código ajustado que debería lograr el resultado deseado:

    listA = [('UK', 1), ('USA', 2), ('UAE', 3)]
    
    def fetchdata(country):
        base_url = 'someurl.com'
        params = {'countryname': country}
        resp = requests.get(base_url, params=params).json()
        return resp['value']  # suponiendo que la respuesta tiene un campo 'value'
    
    def upload(country, ID, value):
        # algún código de inserción SQL utilizando country, ID y value
    
    for country, ID in listA:
        value = fetchdata(country)
        upload(country, ID, value)
    

    Este código iterará sobre listA, pasando cada tupla a fetchdata() y upload() para lograr el comportamiento deseado de obtener datos para cada país, asignar ID/índice y subir los datos a SQL solo una vez.

Comments are closed.