Разделение элементов списка по условию - Python - PullRequest
0 голосов
/ 27 августа 2018

Итак, у меня есть список 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/

Мне нужно перебрать этот список и сгруппировать по tld (домен верхнего уровня) в python. Я использую библиотеку 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/]

1 Ответ

0 голосов
/ 27 августа 2018

Вы можете использовать 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/']})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...