Рефакторинг длинного блока if-else с использованием сопоставления двух столбцов из pandas DataFrame - PullRequest
1 голос
/ 17 февраля 2020

Я создаю чат-бота с помощью Selenium, и на данный момент у него есть два коротких ответа. Когда пользователь отправляет «/ help», бот отправляет «Вы попросили о помощи», а когда пользователь отправляет «/ more», бот отправляет «Вы попросили больше» ...

def conversation():
    if last_msg() == '/help':
        msg = 'You asked help'
        input_field = driver.find_element_by_class_name("_3u328")
        input_field.send_keys(msg)
    elif last_msg() =='/more':
        msg = 'You asked more'
        input_field = driver.find_element_by_class_name("_3u328")
        input_field.send_keys(msg)
    else:
        input_field = driver.find_element_by_class_name("_3u328")
        input_field.send_keys('Sorry, input not listed')
    time.sleep(1)
    driver.find_element_by_class_name("_3M-N-").click()

Как я могу увеличить это значение с помощью pandas? Предполагая, что у меня есть CSV с 2 столбцами, один с именем «MSG», а другой «ответ». Я хотел бы добавить много строк в этот CSV, без необходимости изменять код.

    msg	   reply
0   /help  you_asked_for_help
1   /more  you_asked_for_more

df_with_reply = pd.read_csv (r 'C: \ Users ...')

Как я могу сделать это:

        if last_msg() == '/help':
            msg = 'You asked help'
            input_field = driver.find_element_by_class_name("_3u328")
            input_field.send_keys(msg)
        elif last_msg() =='/more':
            msg = 'You asked more'
            input_field = driver.find_element_by_class_name("_3u328")
            input_field.send_keys(msg)

Превратиться в это:

        if last_msg() == IS IN df COLUMN 'msg'
        RETURN ACCORDING TEXT FROM df COLUMN 'reply' as X 

        input_field = driver.find_element_by_class_name("_3u328")
        input_field.send_keys(X)
        
        else:
        input_field = driver.find_element_by_class_name("_3u328")
        input_field.send_keys('Sorry, input not listed')
           

1 Ответ

2 голосов
/ 17 февраля 2020

Настройка сообщений словаря по умолчанию для отображения ответов.

from collections import defaultdict 

d = defaultdict(lambda: 'Sorry, input not listed')  
d.update(df.set_index('msg')['reply'].to_dict())

Теперь в вашей функции можно получить доступ к d:

def conversation():
    input_field = driver.find_element_by_class_name("_3u328")
    input_field.send_keys(d[last_msg()])

    time.sleep(1)

    driver.find_element_by_class_name("_3M-N-").click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...