我有一个功能可以获取并比较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
谢谢您的时间
答案 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])
...
我希望有帮助。