因此,我有一个具有不同目录结构的URL列表。即:
xyz.com/1/
xyz.com/2/
xyz.com/3/
xyz.com/4/
xyz.com/5/
abc.com/6/
abc.com/7/
abc.com/8/
abc.com/9/
abc.com/10/
我需要遍历此列表,并按python中的tld(顶级域)分组。我正在使用开源python库以循环方式提取tld;即:
for item in list:
registered_domain = tldextract.extract(item).registered_domain
我的问题是,当我遍历混合URL列表时,如何将具有相同基本tld的所有URL分组到单独的列表中;即:
Output:
[xyz.com/1/,xyz.com/2/,xyz.com/3/,xyz.com/4/,xyz.com/5/]
[abc.com/6/,abc.com/7/,abc.com/8/,abc.com/9/,abc.com/10/]
答案 0 :(得分:3)
您可以将collections.defaultdict
与str.split
结合使用。这将创建一个将域映射到URL的字典。
from collections import defaultdict
L = ['xyz.com/1/', 'xyz.com/2/', 'xyz.com/3/', 'xyz.com/4/', 'xyz.com/5/',
'abc.com/6/', 'abc.com/7/', 'abc.com/8/', 'abc.com/9/', 'abc.com/10/']
d = defaultdict(list)
for url in L:
d[url.split('/', 1)[0]].append(url)
# alternatively:
# d[tldextract.extract(url).registered_domain].append(url)
结果
print(d)
defaultdict(list,
{'xyz.com': ['xyz.com/1/', 'xyz.com/2/', 'xyz.com/3/',
'xyz.com/4/', 'xyz.com/5/'],
'abc.com': ['abc.com/6/', 'abc.com/7/', 'abc.com/8/',
'abc.com/9/', 'abc.com/10/']})