根据行中间的数据排序行(在python中)

时间:2010-08-24 04:32:26

标签: python sorting

我有一个域列表,我想根据tld对它们进行排序。最快的方法是什么?

3 个答案:

答案 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)

另外,请记住,从URL获取TLD并非易事。请查看SO上的this链接。在python中,您可以使用urlparse来解析URL。

答案 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])