그것은 사물을 정리하는 매우 이상한 방법입니다. 사전에 저장했다면 간단합니다.
# 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()]