Как сравнить динамические переменные программным способом в Python - PullRequest
0 голосов
/ 22 октября 2018

У меня есть функция, которая получает и сравнивает данные 2 из 6 и более сайтов.После получения данных 2 сайтов я начинаю сортировать данные.Поскольку каждый сайт имеет разное форматирование, мне нужно отсортировать каждый из них по-разному.

И так как я сравниваю 2 из них, мне нужно отсортировать только 2 из них.Для этого мне нужно знать, какой сайт выбран первым, а какой вторым.И мой код ниже оценивает это с if и elif для каждого из сайтов .После добавления каждого веб-сайта в словарь я нашел решение написать по-другому операторы if и elif.

Мой вопрос: как я могу выполнить код сортировки только для соответствующих сайтов, не используя пары if и elif для каждого сайта??Есть ли питонический или программный способ сделать это?

Мой функционал:

def getpairs(xx,yy):
    mydict = {1:"http://1stsite.com", 2:"http://2ndsite.com", ... , 6:"http://6thsite.com" }
    with urllib.request.urlopen(mydict[xx]) as url:
    dataone = json.loads(url.read().decode())
    with urllib.request.urlopen(mydict[yy]) as url:
    datatwo = json.loads(url.read().decode())

    if xx == 1:
        sorted1 = some code to sort 1st website data(dataone list)
        dataxx = sorted1
    elif yy == 1:
        sorted1 =some code to sort 1st website data(datatwo list)
        datayy = sorted1
    if xx == 2:
    ...
    ...
    ...
    if xx == 6:
        sorted6 = some code to sort 6th website data(dataone list)
        dataxx = sorted6
    elif yy == 6:
        sorted6 = some code to sort 6th website data(datatwo list)
        datayy = sorted6
    compared = set(dataxx).intersection(datayy)
    return compared

Спасибо за ваше время

1 Ответ

0 голосов
/ 22 октября 2018

Вы можете создать другой словарь с функциями сортировки, индексированными так же, как индексируется mydict, или, возможно, с URL-адресами.Примерно так:

def sorting_function_1(data):
    ...

def sorting_function_2(data):
    ...

def sorting_function_3(data):
    ...

SORTING_FUNCTIONS = {
    1: sorting_function_1,
    2: sorting_function_2,
    3: sorting_function_3,
    4: sorting_function_2,
    5: sorting_function_1,
    ...
}

def fetch_data(url, sorting_function):
    with urllib.request.urlopen(url) as response:
        data = json.loads(response.read().decode())
        sorted_data = sorting_function(data)
        return sorted_data

def getpairs(xx, yy):
    mydict = { ... }
    dataxx = fetch_data(mydict[xx], SORTING_FUNCTIONS[xx])
    datayy = fetch_data(mydict[yy], SORTING_FUNCTIONS[yy])
    ...

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...