сортировка строк по данным в середине строки (в питоне) - PullRequest
2 голосов
/ 24 августа 2010

У меня есть список доменов, и я хочу отсортировать их по tld. Какой самый быстрый способ сделать это?

Ответы [ 3 ]

5 голосов
/ 24 августа 2010

Используйте параметр key для .sort(), чтобы предоставить функцию, которая может извлекать нужные данные для сортировки.

import urlparse

def get_tld_from_domain(domain)
    return urlparse.urlparse(domain).netloc.split('.')[-1]

list_of_domains.sort(key=get_tld_from_domain)

# or if you want to make a new list, instead of sorting the old one
sorted_list_of_domains = sorted(list_of_domains, key=get_tld_from_domain)

Если вы предпочитаете, вы не можете определить функцию отдельно, а простоиспользуйте функцию lambda, но ее раздельное определение часто облегчает чтение кода, что всегда является плюсом.

2 голосов
/ 24 августа 2010

Кроме того, помните, что получить TLD по URL-адресу нетривиально. Пожалуйста, проверьте эту ссылку на SO. В python вы можете использовать urlparse для разбора URL.

1 голос
/ 24 августа 2010

Как говорит Гангадхар, трудно точно определить, какая часть netloc является tld, но в вашем случае я бы немного изменил код Amber.Это отсортирует весь домен, сначала по последнему уровню, затем по второму и последнему уровню и т. Д.

Это может быть достаточно для того, что вам нужно, без необходимости ссылаться на внешние списки

import urlparse

def get_reversed_domain(domain)
    return urlparse.urlparse(domain).netloc.split('.')[::-1]

sorted_list_of_domains = sorted(list_of_domains, key=get_reversed_domain)

Просто перечитайте ОП, если список уже состоит из доменов, вы можете просто использовать

sorted_list_of_domains = sorted(list_of_domains, key=lambda x:x.split('.')[::-1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...