根据架构标准分离url列表
有一个像
['http:host1', 'http:host2', 'http:host3', 'https:host1', 'https:host4']
我想生成一个对的列表,其中对具有相同的主机,但模式不同:
[('http:host1', 'https:host1'), ('http:host2'), ...]
我可以很容易地分离模式标准:
with_https = [x for x in li if x.startswith('https')]
但想不出一个优雅的解决方案来满足主机标准
回答
使用urllib.parse和collections.defaultdict:
from collections import defaultdict
from urllib.parse import urlparse
grouped_urls = defaultdict(list)
urls = ['http:host1', 'http:host2', 'http:host3', 'https:host1', 'https:host4']
for url in urls:
grouped_urls[urlparse(url).paths].append(url)
print(grouped_urls)
输出:
defaultdict(<class 'list'>, {'host1': ['http:host1', 'https:host1'], 'host2': ['http:host2'], 'host3': ['http:host3'], 'host4': ['https:host4']})