[英]Get all possible combinations from dictionary and list
我正在构建一个网络爬虫并想要生成我想要请求的所有 url。
该 URL 具有三个参数:
我需要从日期列表和设施和运动字典中生成所有可能的组合。
dates = ['2020-10-21', '2020-10-22'] db = {'facility_id': [184, 4, 3, 3], 'sport_id': [1, 2, 1, 5]}
生成的 URL 如下所示(这将是 8 个的第一个结果(字典中的 2 个日期 * 4 行)
https://www.website.se/subsite?date=2020-10-21&facility_id=184&sport_id=1
我尝试了一个嵌套的 for 循环,但发现自己卡住了。
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]} for date in dates: url = url + date + ',' for col in db: url = url + col + ',' for values in db[col]: url = url + str(values) + ',' print(url)
嵌套for循环是要走的路还是有更好的方法?
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
您可以使用itertools.product
:
from itertools import product
dates = ['2020-10-21', '2020-10-22']
db = {'facility_id': [184, 4, 3, 3], 'sport_id': [1, 2, 1, 5]}
for d, (f, s) in product(dates, zip(db['facility_id'], db['sport_id'])):
print('https://www.website.se/subsite?date={}&facility_id={}&sport_id={}'.format(d, f, s))
印刷:
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
尝试这个:
for date in dates:
for fac_id, sport_id in zip(db['facility_id'], db['sport_id']):
res = f'https://www.website.se/subsite?date={date}&facility_id={fac_id}&sport_id={sport_id}'
print(res)
使用您当前的代码在 url 中插入,
。 这是一个解决方案:
dates = ['2020-10-21', '2020-10-22']
db = {'facility_id': [184, 4, 3, 3], 'sport_id': [1, 2, 1, 5]}
for date in dates:
for col in db:
for values in db[col]:
url = f"https://www.website.se/subsite?date={date}&facility_id={col}&sport_id={values}"
print(url)
不确定有没有办法绕过嵌套循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.