根据架构标准分离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.parsecollections.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']})


以上是根据架构标准分离url列表的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>