2010-08-24 5 views

ответ

5

Используйте параметр 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 функцию, но определив ее отдельно зачастую сделать код более удобным для чтения, который всегда плюс.

+0

' sorted() 'возвращает список, поэтому' list() 'здесь избыточен. – jfs

+0

Совершенно верно. В последнее время я слишком много работал с выражениями генератора. :П – Amber

2

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

1

Как говорит Гангадхар, трудно понять, какая часть 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) 

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

sorted_list_of_domains = sorted(list_of_domains, key=lambda x:x.split('.')[::-1]) 
Смежные вопросы