Python 자료구조 3. dict & +⍺ (collections)

이형래·2021년 8월 24일
2

Python

목록 보기
3/10
post-thumbnail

Python 자료구조

3. dict & +⍺ (collections)

3.1 딕셔너리 - dict

  • data를 저장 할 때 각 데이터를 구분 지을 수 있는 값과 함께 저장.
  • 그 구분 지을 수 있는 값을 Key 라고 한다.
  • Key - Value 쌍으로 data를 관리한다.
  • keyValue를 검색하는 형태.
    -> {Key1: Value1, Key2: Value2, Key3: Value3 ...}
>>> dict_a = {}				# dict 생성
>>> type(dict_a)
<class 'dict'>

>>> dict_a = dict()			# dict 생성
>>> type(dict_a)
<class 'dict'>

area_code = {"seoul":"02", "incheon":"032", "busan":"051"}
>>> area_code				# dict type area_code 생성
{'seoul': '02', 'incheon': '032', 'busan': '051'}

>>> area_code.items()			# dict items 전부 리턴.
dict_items([('seoul', '02'), ('incheon', '032'), ('busan', '051')])
>>> type(area_code.items())		# dict_items 객체
<class 'dict_items'>

>>> area_code.keys()			# dict keys 만 리턴.
dict_keys(['seoul', 'incheon', 'busan'])
>>> type(area_code.keys())		# dict_keys 객체
<class 'dict_keys'>

>>> area_code.values()			# dict_values 만 리턴.
dict_values(['02', '032', '051'])
>>> type(area_code.values())		# dict_values 객체
<class 'dict_values'>

>>> area_code["Daegu"] = "053"		# dict item 추가 및 수정.
>>> area_code.items()
dict_items([('seoul', '02'), ('incheon', '032'), ('busan', '051'), ('Daegu', '053')])

>>> for area, num in area_code.items():	# unpacking
        print(f"Key: {area}")
        print(f"Value: {num}")

Key: seoul
Value: 02
Key: incheon
Value: 032
Key: busan
Value: 051
Key: Daegu
Value: 053

>>> "seoul" in area_code.keys()	# key가 dict안에 있는지 확인.
True

딕셔너리(dict) 만들 때 주의 사항.
1. 중복되는 Key값을 설정하면 하나를 제외한 나머지 Key : Value 쌍은 모두 무시된다.
2. listKey로 쓸 수 없다. (값이 변할 수 있기 때문)
하지만, tupleKey로 쓸 수 있다.

3.2 collections

list, tuple, set, dict 등 내장 컨테이너에 대한 대안을 제공하는 Python Built-In 확장 모듈.

- from collections import duque
- from collections import OrderedDict
- from collections import defaultdict
- from collections import Counter
- from collections import namedtuple

3.2.1 deque

  • stackqueue를 지원하는 모듈.
  • list와 유사하지만, list에 비해 빠른 자료 저장 방식을 지원한다.
    (appendpop을 양쪽에서 거의 같은 O(1) 성능으로 지원함.)
  • rotate, reverseLinked List의 특성을 지원한다.

주요 메소드.

my_deque.append(x)
my_deque.appendleft(x)
my_deque.extend(iterable)
my_deque.extendleft(iterable)
my_deque.rotate()
my_deque.pop()
my_deque.popleft()

3.2.2 OrderedDict

항목이 추가된 순서를 기억하는 dict 서브 클래스

하지만, python 3.6부터는 dict도 입력한 순서를 보장하므로,
이런게 있다는 것 정도만 알고 넘어가자.

3.2.3 defaultdict

dictvalue에 기본(default) 값을 지정한다.
신규값 생셩시 또는 누락된 value에 값을 제공하기 위해 사용한다.

>>> from collections import defaultdict
>>> my_dict = defaultdict(lambda : 0)
>>> my_dict
defaultdict(<function <lambda> at 0x1011d6a60>, {})
>>> my_dict["key1"]
0
>>> my_dict.items()
dict_items([('key1', 0)])
  • Text-mining 기법 사용시 유용하게 쓰인다고 함.

3.2.4 Counter

sequence typedata element들의 개수를 dict 형태로 반환함.
(해시 가능한 객체를 세기 위해 사용)
data elementKey로 저장되고, 개수가 Value로 저장됨.

>>> from collections import Counter
>>> my_alpha = "ABBCCCDDDDEEEEEFFFFFF"
>>> alpha_counter = Counter(my_alpha)
>>> alpha_counter.items()
dict_items([('A', 1), ('B', 2), ('C', 3), ('D', 4), ('E', 5), ('F', 6)])

# or

>>> exam_grade = ['A+', 'B', 'C+', 'A+', 'B+', 'B']
>>> grade_counter = Counter(exam_grade)
>>> grade_counter.items()
dict_items([('A+', 2), ('B', 2), ('C+', 1), ('B+', 1)])

3.2.5 namedtuple

data structtuple 형태로 저장.
data struct의 변수들을 사전에 지정해서 저장한다.

>>> from collections import namedtuple
>>> Point = namedtuple('Point', ['x', 'y'])
>>> p1 = Point(x = 20, y = 40)
>>> print(p1[0], p1[1])
20 40
>>> x1, y1 = p1		#unpacking
>>> print(x1, y1)
20 40
profile
머신러닝을 공부하고 있습니다. 특히 비전 분야에 관심이 많습니다.

0개의 댓글