如何在python中以编程方式比较动态变量

如何在python中以编程方式比较动态变量,python,dynamic,Python,Dynamic,我有一个功能,可以获取和比较6个或更多网站中的2个数据。在得到两个站点的数据后,我开始整理数据。由于每个站点有不同的格式,我需要对每个站点进行不同的排序 因为我比较了其中的两个,所以我只需要对其中的两个进行排序。为了做到这一点,我需要知道哪个网站被选中的第一和第二。下面我的代码使用if和elif对每个站点进行评估。每个网站都添加到字典中,我找到了一个解决方案来编写另一个if和elif语句 我的问题是:如何只执行相关站点的排序代码 不为每个网站使用if和elif对?有没有一种pythonic或编程

我有一个功能,可以获取和比较6个或更多网站中的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

感谢您抽出时间

您可以创建另一个具有排序功能的词典,其索引方式与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])
    ...

我希望这对我有帮助。

排序函数词典对我来说非常有用,非常感谢。但现在字典不在函数中,每次我运行代码时,所有排序函数都会重新计算。这有解决办法吗?我很高兴它对你有效。我不太明白你的后续问题。具体来说,我不明白你所说的“重新计算”是什么意思。你能详细说明一下吗?在你的代码中,函数字典不在任何函数中。因此,即使我选择了其中的两个,dict中的所有排序函数都会被计算出来。这不是什么大问题,因为运行时间不是问题。但是,如果知道是否有一种方法可以不运行getpairs函数中未声明的所有其他排序函数,那就太好了。我明白了。我不会担心的。他们实际上并没有跑;他们只是在字典中被引用。如果您将定义一个非常大的、难以管理的排序函数数,您可能需要考虑使用策略模式的面向对象方法,或者分析排序函数中常见的和不常见的内容,并寻找一种方法来对常见的内容进行编码,并将其余部分提取到配置中。祝你好运我是编程新手,所以我会检查策略模式以备不时之需。谢谢你的帮助