基于线中间的数据(在Python中)对行进行排序
我有一个域列表,我想根据tld对它们进行排序。执行此操作的最快方法是什么?使用基于线中间的数据(在Python中)对行进行排序,python,sorting,Python,Sorting,我有一个域列表,我想根据tld对它们进行排序。执行此操作的最快方法是什么?使用键参数.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 ma
键参数.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
函数,但是单独定义它通常可以使代码更易于阅读,这总是一个优点。此外,请记住,从URL获取TLD并不是一件小事。请检查SO上的链接。在python中,您可以使用解析URL。正如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])
sorted()。最近我对生成器表达式的使用太多了P