그것은 사물을 정리하는 매우 이상한 방법입니다. 사전에 저장했다면 간단합니다.
# This example should work in any version of Python.
# urls_d will contain URL keys, with counts as values, like: {'http://www.google.fr/' : 1 }
urls_d = {}
for url in list_of_urls:
if not url in urls_d:
urls_d[url] = 1
else:
urls_d[url] += 1
카운트 사전을 업데이트하는이 코드는 Python에서 일반적인 "패턴"입니다. defaultdict이 작업을 더 쉽게하기 위해 만들어진 특수 데이터 구조 인은 매우 일반적입니다 .
from collections import defaultdict # available in Python 2.5 and newer
urls_d = defaultdict(int)
for url in list_of_urls:
urls_d[url] += 1
defaultdict키를 사용하여에 액세스하고 키가에 아직없는 defaultdict경우 키가 기본값으로 자동 추가됩니다. 는 defaultdict당신이 전달 된 호출 소요되며, 기본 값을 얻을를 호출합니다. 이 경우 우리는 클래스를 통과했습니다 int. 파이썬이 호출 int()하면 0 값을 반환합니다. 따라서 URL을 처음 참조하면 개수가 0으로 초기화 된 다음 개수에 1을 추가합니다.
그러나 카운트로 가득 찬 딕셔너리도 일반적인 패턴이므로 Python은 즉시 사용할 containers.Counter 수 Counter있는 클래스를 제공합니다. 클래스를 호출하여 인스턴스를 만들고 iterable을 전달하면됩니다. 키가 이터 러블의 값이고 값이 키가 이터 러블에 나타난 횟수를 계산하는 사전을 빌드합니다. 위의 예는 다음과 같습니다.
from collections import Counter # available in Python 2.7 and newer
urls_d = Counter(list_of_urls)
실제로 보여준 방식으로해야하는 경우 가장 쉽고 빠른 방법은이 세 가지 예제 중 하나를 사용한 다음 필요한 것을 구축하는 것입니다.
from collections import defaultdict # available in Python 2.5 and newer
urls_d = defaultdict(int)
for url in list_of_urls:
urls_d[url] += 1
urls = [{"url": key, "nbr": value} for key, value in urls_d.items()]
Python 2.7 이상을 사용하는 경우 한 줄로 수행 할 수 있습니다.
from collections import Counter
urls = [{"url": key, "nbr": value} for key, value in Counter(list_of_urls).items()]