You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现根据字典参数组合动态拼接API请求URL字符串

动态生成多筛选条件组合API URL实现方案

需求说明

给定基础API地址:
https://api.xxx.com/resource/xxx?api-key=xxx&format=json&limit=500
需要根据传入的筛选条件字典,自动生成所有参数笛卡尔积组合对应的完整请求URL,要求兼容任意数量的筛选键,不能硬编码参数名。
示例筛选字典:

criteria = {'city':["Mumbai","Delhi"], 'polutant_id': ["PM10", "NO2"]}

最终需要输出4条拼接完成的URL,格式和如下预期一致:

"https://api.xxx.com/resource/xxx?api-key=xxx&format=json&limit=500&filters[city]=Mumbai&filters[polutant_id]=PM10"
"https://api.xxx.com/resource/xxx?api-key=xxx&format=json&limit=500&filters[city]=Delhi&filters[polutant_id]=PM10"
"https://api.xxx.com/resource/xxx?api-key=xxx&format=json&limit=500&filters[city]=Mumbai&filters[polutant_id]=NO2"
"https://api.xxx.com/resource/xxx?api-key=xxx&format=json&limit=500&filters[city]=Delhi&filters[polutant_id]=NO2"

实现代码

你之前写的笛卡尔积生成逻辑是可行的,不需要硬编码参数前缀列表,遍历每一组参数组合动态拼接筛选片段即可,这里给两个版本,第一个是去掉pandas依赖的轻量版本,性能更好:

import itertools

# 基础配置
base_url = "https://api.xxx.com/resource/xxx?api-key=xxx&format=json&limit=500"
criteria = {'city':["Mumbai","Delhi"], 'polutant_id': ["PM10", "NO2"]}

# 提取所有筛选键,生成参数值的笛卡尔积组合
param_keys = list(criteria.keys())
param_combinations = itertools.product(*criteria.values())

result = []
for combo in param_combinations:
    filter_segment = ""
    # 逐个拼接当前组合的筛选参数
    for k, v in zip(param_keys, combo):
        filter_segment += f"&filters[{k}]={v}"
    # 拼接完整URL并加上预期的双引号包裹
    full_url = f'"{base_url}{filter_segment}"'
    result.append(full_url)

# 打印验证输出
for url in result:
    print(url)

如果你要沿用之前写的pandas版expand_grid函数,拼接逻辑如下:

import pandas as pd
import itertools

def expand_grid(data_dict):
    rows = itertools.product(*data_dict.values())
    return pd.DataFrame.from_records(rows, columns=data_dict.keys())

# 基础配置
base_url = "https://api.xxx.com/resource/xxx?api-key=xxx&format=json&limit=500"
criteria = {'city':["Mumbai","Delhi"], 'polutant_id': ["PM10", "NO2"]}
criteriaAll = expand_grid(criteria)

result = []
for _, row in criteriaAll.iterrows():
    filter_segment = ""
    for k in criteria.keys():
        filter_segment += f"&filters[{k}]={row[k]}"
    full_url = f'"{base_url}{filter_segment}"'
    result.append(full_url)

优化提示

  • 上述代码完全兼容任意数量的筛选键:不管criteria里有2个、3个还是更多键,每个键对应多少个可选值,都能自动生成所有组合的URL,不需要修改逻辑
  • 如果参数值包含特殊字符(中文、空格、符号等),引入urllib.parse.quote对参数值做URL编码,避免请求格式错误,拼接时替换为如下写法即可:
    from urllib.parse import quote
    filter_segment += f"&filters[{k}]={quote(str(v))}"
    

内容的提问来源于stack exchange,提问作者Ujjawal Bhandari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 22:57:20