빈 Dictionary 이용:
words = "a b c d a c"
word_list = words.split() # ['a', 'b', 'c', 'd', 'a', 'c']
dict = {} #빈 딕셔너리
for word in word_list:
if word in dict: # 이미 있는 키
dict[word] += 1
else: # 처음 보는 키
dict[word] = 1
for key,value in dict.items():
print("{}: {}개".format(key, value), end=" ") # a: 2개 b: 1개 c: 2개 d: 1개
-
리스트에서 중복되는 값의 갯수를 알고 싶을 때, 값을 split()로 나눈 후 빈 딕셔너리 생성
-
이미 있는 경우, 없는 경우로 나눠서 갯수를 세렸다.
Counter 이용:
from collections import Counter
word_item = Counter(word_list)
for key,value in word_item.items():
print("{}: {}개".format(key, value)) # a: 2개 b: 1개 c: 2개 d: 1개
-
제일 위에 collections 모듈에서 Counter 클래스를 import
-
처음보는 키, 이미 있는 키로 나눠서 빈 딕셔너리에 담았던 절차를 알아서 해줌
word_item.items() # dict_items([('a', 2), ('b', 1), ('c', 2), ('d', 1)])
word_item.keys() # dict_keys(['a', 'b', 'c', 'd'])
word_item.values() # dict_values([2, 1, 2, 1])
-
Counter 자료의 형태는 dictionary형태
-
items, values, keys도 사용 가능
Counter로 자료 추가:
x = Counter(a=2, b=4, c=2) # Counter({'b': 4, 'a': 2, 'c': 2})
y = Counter() y.update('aabbbbcc') # Counter({'b': 4, 'a': 2, 'c': 2})
-
위와 같은 방식으로도 자료를 추가 가능
-
기본적으로 Counter는 갯수를 세리는 클래스이므로 추가한 자료는 key별로 나눠 value를 갯수로 가짐
-
기본적으로 정렬은 value 내림차순이 디폴트
-
'a'를 먼저 넣어도 value가 큰 순서대로 정렬
Counter 연산:
x= Counter('abcd')
y= Counter('abcf')
result = x-y # Counter({'d': 1})
x.subtract(y) # Counter({'d': 1, 'a': 0, 'b': 0, 'c': 0, 'f': -1})
-
Counter 함수는 연산이 가능한데 더하기, 빼기가 가능
-
subtract도 있는데 이 메소드를 이용하면 0과 음수값을 가질 수도 있다는 점에서 빼기랑 다름
-
빼기는 0, 음수 값을 가진 결과는 데이터로 가지지 않음
-
이외에도 교집합 합집합 빈도수를 구할 수도 있음
'Backend > Python' 카테고리의 다른 글
[인스타그램클론] 폼 에러메시지 표시 (0) | 2020.07.18 |
---|---|
[인스타그램 클론] 단일 페이지에 모델 폼 추가하기 (0) | 2020.06.17 |
[인스타그램 클론] Vanilla JS - AJAX (0) | 2020.06.08 |
[인스타그램 클론] 프로필 페이지 (0) | 2020.04.28 |
form 이미지 업로드 (0) | 2020.04.22 |