我有一个域列表,我想根据tld对它们进行排序。最快的方法是什么?
答案 0 :(得分: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
功能,但单独定义该功能通常可以使您的代码更易于阅读,这总是一个优势。
答案 1 :(得分:2)
答案 2 :(得分:1)
正如Gangadhar所说,很难确切地知道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])