我正在编写一个函数来生成一个API url,它接受多个参数并复制字符串的一部分。短版本(只接受变量Val
的一个值)如下所示
def get_url(par,att,value, _filter):
base_url='''https://mytest.com/api/Test/'''+str(par)+'''?size=100000&filters=['''
url = base_url + '''{"VarA" : "'''+att+'''", "Val":["'''+value+'''"], "VarB":"'''+_filter+'''"}]'''
return url
print(get_url('Sales',{'Year':['2020'] , "Time"}))
这会回来的
https://mytest.com/api/Test/Sales?size=1000&filters=[{"VarA" : "Year", "Val":["2020"], "VarB":"Time"}]
我编写了另一个函数,以便可以为Val
传递多个变量,同时还可以使用下面的函数复制过滤器字符串
def get_url(par,argv=None, _filter=None):
if argv:
att=argv
url='''https://mytest.com/api/Test/'''+str(par)+'''?size=100000&filters=['''
i=0
for key in att.keys():
attribute=key
attribute_value=att[attribute]
my_lst_str = '","'.join(map(str, attribute_value))
values= '"'+my_lst_str+'"'
if i==0:
url=url+'''{"VarA" : "'''+attribute+'''", "Val":['''+value+'''], "VarB":'''+str(_filter)+'''}]'''
else:url=url+''',{"VarA" : "'''+attribute+'''", "Val":['''+value+'''], "VarB":'''+str(_filter)+'''}]'''
i+=1
else:
url = #Some string#
return url
url = get_url('Sales',{'Loc':['USA','CAN'],'Year':["2016","2017"]},{'Country','Time'})
但是上面的代码返回的是
https://mytest.com/api/Test/Sales?size=1000&filters=[{"VarA" : "Loc", "Val":["USA","CAN"], "VarB":"{'Country', 'Time'}"}],{"VarA" : "Year", "Val":["2016","2017"], "VarB":"{'Country', 'Time'}"}]
我的预期产出是
https://mytest.com/api/Test/Sales?size=1000&filters=[{"VarA" : "Loc", "Val":["USA","CAN"], "VarB":"Country"},{"VarA" : "Year", "Val":["2020","2017"], "VarB":"Time"}]
如何隔离VarB
的元素
您可以使用索引:
输出:
请注意:集合中元素的顺序是未定义的,尽管它可能由各种元素组成。通过将
set
转换为list
您无法确保顺序保持不变问题中的代码也不能正常运行
我的答案是基于您预期的输出,并且我没有考虑边缘情况,我强烈建议更改函数参数。此外,我认为_filter
是一个列表["Country", "Time"]
相关问题 更多 >
编程相关推荐