Это дает вам одну запись на домен (случается, последняя, а не первая):
from urllib.parse import urlparse
data = ["http://x.com/", "http://x.com/some/dir/", "http://x.com/other", "http://y.com/something", "http://y.com/else"]
result = list({urlparse(url).netloc: url for url in data}.values())
Если вы предпочитаете первую:
result = list({urlparse(url).netloc: url for url in reversed(data)}.values())
print(result)
Результат:
['http://y.com/something', 'http://x.com/']
Это работает следующим образом:
urlparse('https://somedomain.com/some/path')
сломает URL, и одна из частей .netloc
- это домен, который вы ищете, то есть 'somedomain.com'
{urlparse(url).netloc: url for url in reversed(data)}
переворачивает список data
, а затем для каждого url
в списке он получает домен и добавляет запись в словарь, который создается с доменом в качестве ключа и URL-адресом в качестве ценность; так как ключи в словаре должны быть уникальными, каждый тип, который принадлежит одному и тому же домену, запись перезаписывается (следовательно, обращение) list(somedict.values())
просто берет значения словаря и превращает их в простой список .
Итак, это объясняет, как result = list({urlparse(url).netloc: url for url in data}.values())
приводит к тому же результату, что и result = ['http://y.com/something', 'http://x.com/']
для вашего ввода data
.