Перебирать несколько списков и назначать переменные на основе каждой итерации

#python #selenium #selenium-chromedriver

#python #selenium #selenium-chromedriver

Вопрос:

У меня есть csv с 4 столбцами, которые я конвертирую в фрейм данных pandas, а затем превращаю каждый столбец в список. Я пытаюсь перебирать каждый список и извлекать данные на основе идентификатора. В зависимости от того, какой это идентификатор, он будет выбирать из 1 из 2 выпадающих списков. Я пытаюсь выработать логику настройки переменных sale_type и form_code, которые будут разными для каждой итерации столбца.

С помощью приведенного ниже кода он автоматически устанавливает form_code = 2 и sale_type =’Push Notification’ после завершения итерации по столбцу push-уведомлений он возвращает form_code = 1 и sale_id в Nan, а затем останавливается.

Список push-уведомлений sale_id является последним списком и должен быть повторен последним.

 def get_report_data(self):
        ("Gathering Report Data...")
        current_date = helpers.currentDate
        report_results = []
        data = pd.read_csv(r'C:UsersrfordDesktopsale_ids.csv')
        everyone_ids = data['Everyone'].tolist()
        dd_ids = data['Daily Deal'].tolist()
        targeted_ids = data['Targeted'].tolist()
        push_ids = data['Push Notification'].tolist()
        for sale_id, sale_id, sale_id, sale_id in zip(everyone_ids, dd_ids, targeted_ids, push_ids):
            if sale_id in everyone_ids:
                form_code = 1
                sales_type = "Everyone"
            elif sale_id in dd_ids:
                form_code = 1
                sales_type = "Daily Deal"
            elif sale_id in targeted_ids:
                form_code = 2
                sales_type = "Targeted"
            else: 
                form_code = 2
                sales_type = "Push Notification"
            helpers.driver.find_element_by_xpath('/html/body/form[{}]/div/select/option[@value={}]'.format(form_code, sale_id)).click()```
 

Ответ №1:

Ваш цикл ‘for’ выбросит все, кроме последнего списка. Помните, что zip доставляет одну вещь из каждого списка в каждом цикле. Нет ничего постыдного в том, чтобы делать это как 4 отдельных цикла ‘for’, но если вы действительно хотите, вы можете сделать:

     for form_code, sales_type, idlist in (
        ( 1, "Everyone", everyone_ids ),
        ( 1, "Daily Deal", dd_ids ),
        ( 2, "Targets", targeted_ids ),
        ( 2, "Push Notification", push_ids ) ):
        for sale_id in idlist:
            helpers.driver.find_element_by_xpath( ... etc ... )
 

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

1. это работает, спасибо, но сейчас я сталкиваюсь со следующей проблемой: