2016-11-14 6 views
0

내가 그 TLDs정렬 및 그룹이 한 번

내 코드에 의해 그룹에 URL을 목록을 원하는는 다음과 같습니다 (where n == len(urls)), 정렬 할 때 처음 n 번, 그룹화 할 때 두 번째 n 번. N 번 만들 수 있습니까?

답변

3

먼저 튜플로 접미사를 추가하는 경우, 당신은 다음 정렬하고 GROUPBY 다음과 같이 재 계산하지 않고도 할 수 있습니다 :이 예에서

from itertools import groupby 
from tldextract import extract 

urls = ["www.example.com", "www.mytest.org", "www.test.com", "www.abc.com"] 
urls = [(extract(url).suffix, url) for url in urls] 

for k, g in groupby(sorted(urls), key=lambda x: x[0]): 
    print k, list(g) 

당신은 얻을 것이다 :

0

을 따라 모든 URL의 목록이 얼마나 큰지, 추출 된 모든 항목의 목록을 한 번 작성한 다음 색인 목록의 색인을 및 그룹에 사용하면 속도가 빨라질 수 있습니다.210 :

from itertools import groupby, count 
from tldextract import extract 

c1, c2 = count(), count() 

lst = [extract(x).suffix for x in urls] 
urls = sorted(urls, key=lambda _: lst[next(c1)]) 
grouped_urls = groupby(urls, key=lambda _: lst[next(c2)]) 

이것의 단점은 2nO(1) 인덱싱을 할 수있을거다,하고 목록에 extract(x)의 총 시간이 시간보다 훨씬 더 많은 경우 최대 속도는 한계보다 더 될 것입니다 새 목록의 색인을 생성하는 데 사용됩니다.