繁体   English   中英

从字典和列表中获取所有可能的组合

[英]Get all possible combinations from dictionary and list

我正在构建一个网络爬虫并想要生成我想要请求的所有 url。
该 URL 具有三个参数:

  • 日期
  • 设施编号
  • 运动ID

我需要从日期列表和设施和运动字典中生成所有可能的组合。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM