chapter3. 내장 자료구조, 함수, 파일(2)

DAWN·2023년 7월 27일
0

3.1.3 딕셔너리

>>> empty_dict = {}
>>> d1 = {'a':'some value', 'b':[1, 2, 3, 4]}
>>> d1
{'a': 'some value', 'b': [1, 2, 3, 4]}
>>> d1[7] = 'an integer'
>>> d1
{'a': 'some value', 'b': [1, 2, 3, 4], 7: 'an integer'}
>>> d1['b']
[1, 2, 3, 4]
>>> 'b' in d1
True

삭제

  • del 예약어
>>> d1[5] = 'some value'
>>> d1
{'a': 'some value', 'b': [1, 2, 3, 4], 7: 'an integer', 5: 'some value'}
>>> del d1[5]
>>> d1
{'a': 'some value', 'b': [1, 2, 3, 4], 7: 'an integer'}
  • pop 메서드(값을 반환함과 동시에 해당 키를 삭제)
>>> ret = d1.pop('b')
>>> ret
[1, 2, 3, 4]
>>> d1
{'a': 'some value', 7: 'an integer'}
  • keys, values 메서드 : 키와 값
>>> d1
{'a': 'some value', 7: 'an integer'}
>>> list(d1.keys())
['a', 7]
>>> list(d1.values())
['some value', 'an integer']
  • items 메서드 : 키와 값의 쌍을 갖는 튜플
>>> list(d1.items())
[('a', 'some value'), (7, 'an integer')]
>>> d1
{'a': 'some value', 7: 'an integer'}
>>> d1.update({'b':'foo', 'c':12})
>>> d1
{'a': 'some value', 7: 'an integer', 'b': 'foo', 'c': 12}

순차 자료형에서 딕셔너리 생성하기

>>> tuples = zip(range(5), reversed(range(5)))	# key, values
>>> tuples
<zip object at 0x000001792EEDF940>
>>> mapping = dict(tuples)
>>> mapping
{0: 4, 1: 3, 2: 2, 3: 1, 4: 0}

기본값

>>> words = ['apple', 'bat', 'bar', 'atom', 'book']
>>> by_letter = {}
>>> for word in words:
...     letter = word[0]
...     if letter not in by_letter:
...         by_letter[letter] = [word]
...     else:
...         by_letter[letter].append(word)
...
>>> by_letter
{'a': ['apple', 'atom'], 'b': ['bat', 'bar', 'book']}
>>> by_letter = {}
>>> for word in words:
...     letter = word[0]
...     by_letter.setdefault(letter, []).append(word)
...
>>> by_letter
{'a': ['apple', 'atom'], 'b': ['bat', 'bar', 'book']}
  • 내장 collections 모듈 defaultdict 클래스 : 자료형 또는 딕셔너리의 각 슬롯에 담길 기본값을 생성하는 함수를 넘겨서 딕셔너리를 생성함
>>> from collections import defaultdict
>>> by_letter = defaultdict(list)
>>> for word in words:
...     by_letter[word[0]].append(word)
...
>>> by_letter
defaultdict(<class 'list'>, {'a': ['apple', 'atom'], 'b': ['bat', 'bar', 'book']})

유효한 딕셔너리 키

  • 리스트를 키로 사용하기 위한 방법 : 리스트를 튜플로 변환
>>> d = {}
>>> d[tuple([1, 2, 3])] = 5
>>> d
{(1, 2, 3): 5}

3.1.4 집합

  • set 함수를 이용하거나 중괄호({})를 이용해서 생성
>>> set([2, 2, 2, 1, 3, 3])
{1, 2, 3}
>>> {2, 2, 2, 1, 3, 3}
{1, 2, 3}
  • 합집합
>>> a = {1, 2, 3, 4, 5}
>>> b = {3, 4, 5, 6, 7, 8}
>>> a.union(b)
{1, 2, 3, 4, 5, 6, 7, 8}
>>> a|b
{1, 2, 3, 4, 5, 6, 7, 8}
  • 교집합
>>> a.intersection(b)
{3, 4, 5}
>>> a & b
{3, 4, 5}
  • 파이썬 집합 연산 예시)
>>> c = a.copy()
>>> c |= b		# c에 c와 b의 합집합을 대입한다.
>>> c
{1, 2, 3, 4, 5, 6, 7, 8}
>>> d = a.copy()
>>> d &= b		# d에 d와 b의 교집합을 대입한다.
>>> d
{3, 4, 5}
>>> my_data = [1, 2, 3, 4]
>>> my_set = {tuple(my_data)}
>>> my_set
{(1, 2, 3, 4)}
>>> a_set = {1, 2, 3, 4, 5}
>>> {1, 2, 3}.issubset(a_set)	# a.issubset(b) : a의 모든 원소가 b에 속할 경우 True
True
>>> a_set.issuperset({1, 2, 3})	# a.issuperset(b) : a가 b의 모든 원소를 포함할 경우 True
True

3.1.5 내장 순차 자료형 함수

1. sorted

  • 정렬된 순차 자료형
>>> sorted([7, 1, 2, 6, 0, 3, 2])
[0, 1, 2, 2, 3, 6, 7]
>>> sorted('horse race')
[' ', 'a', 'c', 'e', 'e', 'h', 'o', 'r', 'r', 's']

2. zip

  • 여러 개의 리스트나 튜플 또는 다른 순차 자료형을 짝지어서 만든 튜플 리스트
>>> seq1 = ['foo', 'bar', 'baz']
>>> seq2 = ['one', 'two', 'three']
>>> zipped = zip(seq1, seq2)
>>> list(zipped)
[('foo', 'one'), ('bar', 'two'), ('baz', 'three')]
>>> seq3 = [False, True]
>>> list(zip(seq1, seq2, seq3))
[('foo', 'one', False), ('bar', 'two', True)]
>>> for index, (a, b) in enumerate(zip(seq1, seq2)):
...     print(f'{index}: {a}, {b}')
...
0: foo, one
1: bar, two
2: baz, three

3. reversed

  • 순차 자료형을 역순으로 조회함
>>> list(reversed(range(10)))
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
			
            
profile
내년엔 나도 데이터 엔지니어 !!!

0개의 댓글