如何在python

时间:2018-10-21 21:31:18

标签: python dynamic

我有一个功能可以获取并比较6个或更多网站数据中的2个。获得2个站点数据后,我开始整理数据。由于每个网站的格式都不同,因此我需要对每个网站进行不同的排序。

由于我比较了其中2个,因此我只需要对其中2个进行排序。为此,我需要知道首先选择哪个站点,然后选择第二个站点。下面的“我的代码”使用 if和elif评估每个站点。将每个网站添加到字典中后,我找到了写另一个if和elif语句的解决方案。

我的问题是:如何仅执行相关站点的排序代码  而不为每个网站使用if和elif对?有pythonic或编程的方式来做到这一点吗?

我的功能是:

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 :(得分:0)

您可以使用排序功能(以与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])
    ...

我希望有帮助。