如何从日期列表与设施运动字典生成所有请求URL组合?
嘿,我来帮你搞定这个URL生成的麻烦!首先得说,嵌套循环本身是可行的,但你的循环逻辑出了问题——你现在的代码会把所有参数混乱拼接成一个长字符串,而不是生成每个独立的URL。而且你没有把facility_id和sport_id按对应的索引配对(比如184对应1,4对应2这种),而是把所有facility值和sport值交叉组合,这和你要的结果完全不符。
先给你修正后的嵌套循环实现
我们需要先把facility_id和sport_id按索引一一配对,然后再和每个日期组合:
base_url = 'https://www.website.se/subsite?' dates = ['2020-10-21', '2020-10-22'] db = {'facility_id': [184, 4, 3, 3], 'sport_id': [1, 2, 1, 5]} # 先把对应的facility_id和sport_id配对成元组列表 facility_sport_pairs = list(zip(db['facility_id'], db['sport_id'])) # 嵌套循环生成所有URL for date in dates: for fac_id, sport_id in facility_sport_pairs: # 手动拼接参数(简单直观) full_url = f"{base_url}date={date}&facility_id={fac_id}&sport_id={sport_id}" print(full_url)
更优的实现方法:用urllib.parse构建参数(推荐)
手动拼接URL参数容易出错(比如特殊字符转义),用Python内置的urllib.parse.urlencode来构建参数更规范,也更易维护:
from urllib.parse import urlencode base_url = 'https://www.website.se/subsite?' dates = ['2020-10-21', '2020-10-22'] db = {'facility_id': [184, 4, 3, 3], 'sport_id': [1, 2, 1, 5]} facility_sport_pairs = list(zip(db['facility_id'], db['sport_id'])) # 用列表推导式一次性生成所有URL all_urls = [ base_url + urlencode({ 'date': date, 'facility_id': fac_id, 'sport_id': sport_id }) for date in dates for fac_id, sport_id in facility_sport_pairs ] # 打印所有结果 for url in all_urls: print(url)
运行后你会得到期望的8个URL:
https://www.website.se/subsite?date=2020-10-21&facility_id=184&sport_id=1
https://www.website.se/subsite?date=2020-10-21&facility_id=4&sport_id=2
https://www.website.se/subsite?date=2020-10-21&facility_id=3&sport_id=1
https://www.website.se/subsite?date=2020-10-21&facility_id=3&sport_id=5
https://www.website.se/subsite?date=2020-10-22&facility_id=184&sport_id=1
https://www.website.se/subsite?date=2020-10-22&facility_id=4&sport_id=2
https://www.website.se/subsite?date=2020-10-22&facility_id=3&sport_id=1
https://www.website.se/subsite?date=2020-10-22&facility_id=3&sport_id=5
内容的提问来源于stack exchange,提问作者MasterSmack

