1. 딕셔너리(Dictionary)
- 키(Key)와 값(Value)을 쌍으로 갖는 자료형이며, 키를 이용하여 값을 참조
- 리스트가 '인덱스를 기반으로 값을 저장'하는 것이라면, 딕셔너리는 '키를 기반으로 값을 저장'하는 것
1.1 딕셔너리 생성
- 딕셔너리의 항목은 [키]:[값] 형식과 같이 콜론으로 연결되어 정의
- 항목이 하나 이상 모여서 딕셔너리 구성
>>>> person = {'이름':'홍길동', '나이':26, '몸무게':82}
>>>> person['이름']
'홍길동'
>>>> person['나이']
26
>>>> person['몸무게']
82
1.2 딕셔너리 수정
- 딕셔너리에 새로운 항목을 삽입하려면 다음과 같은 방법 사용
딕셔너리[새로운 키] = '새로운 값
- 삭제 시 del 키워들 다음에 삭제할 딕셔너리 항목의 키를 입력
- 존재하지 않는 키를 이용하여 항목을 삭제하려하면 KeyError라는 오류메시지가 출력됨
>>>> person['직업'] = '율도국의 왕'
>>>> person
{'이름':'홍길동', '나이':27, '몸무게':82, '직업':'율도국의 왕'}
>>>> del person['나이']
>>>> person
{'이름':'홍길동', '몸무게':82, '직업':'율도국의 왕'}
1.3 딕셔너리 함수, 메소드
1.3.1 함수와 연산
- len(): 딕셔너리 내의 항목 수를 얻기 위해 사용
- in, not in: 키와 값이 딕셔너리에 있는지 확인
- ==, !=: 두 개의 딕셔너리가 동일한 항목을 가지고 있는지 확인
- 딕셔너리에서는
>, >=, <, <=와 같은 비교연산을 지원하지 않음
>>>> d1 = {'이름':'홍길동', '나이':26}
>>>> d2 = {'나이':26, '이름':'홍길동'}
>>>> d1 == d2
True
>>>> d1 < d2
...
TypeError: '>' not supported between instances of 'dict' and e'dict'
1.3.2 메소드
- keys(): 딕셔너리 내의 모든 키를 반환
- values(): 딕셔너리 내의 모든 값을 반환
- items(): 딕셔너리 내의 모든 항목을 [키]:[값] 쌍으로 반환
- get(key): 키에 대한 값을 반환. 키가 없으면 None을 반환
- pop(key): 키에 대한 값을 반환하고, 그 항목을 삭제. 키가 없으면 KeyError 예외 발생
- popitem(): 랜덤하게 선택된 항목을 반환하고 그 항목을 삭제
- clear() 딕셔너리 내외의 모은 항목을 학제함]
1.4 KeyError 예외
- 리스트의 길이를 넘는 인덱스에 접근하면 IndexError가 발생했듯, 딕셔너리도 존재하지 않는 키에 접근 시 KeyError가 발생
- 존재하는 키인지, 아닌지 여부를
in키워드나 딕셔너리의 get()함수를 사용하는 방법이 있음
- get('키'): 딕셔너리 내부에 해당 키값이 있으면
딕셔너리[키]를 입력할 때와 동일한 기능을 하나, 존재하지 않을 경우 None출력
2. 튜플(Tuple)
- 튜플은 몇 가지 점을 제외하곤 리스트와 거의 비슷하며 리스트와 다른 점은 다음과 같음
- 리스트는 []으로 둘러싸지만, 튜플은 ()으로 둘러싼다
- 리스트는 그 값의 생성, 수정, 삭제 가능하지만 튜플은 값을 바꿀 수 없음
2.1 튜플 생성
- 빈 튜플 만들기: tup = ()
- 하나의 요소를 가진 튜플 만들기: tup = (1, )
- 기본적인 튜플 만들기: tup = (1, 2, 3, 4)
- 간단한 방식의 튜플 만들기: tup = 1, 2, 3, 4
- 리스트로부터 튜플 만들기
lst = [1, 2, 3, 4]
tup = tuple(lst)
>>>> t = (1, 2, 3, 4)
>>>> t[0]
1
>>>> t[1]
2
- 튜플 내에 하나의 요소만을 갖는다고
tup = (100)과 같은 할당을 할 경우, tup = 100과 동일하게 취급되어 tup은 튜플이 아니라 정수가 됨
- 따라서 tup을 튜플로 사용하고 싶다면
tup = (100, )과 같이 쉼표를 반드시 삽입
>>>> tup1 = (100)
>>>> tup1
100
>>>> type(tup1)
<class 'int'>
>>>> tup2 = (100, )
>>>> tup2
(100,)
>>>> type(tup2)
<class 'tuple'>
2.2 튜플 수정
- 튜플은 리스트와 달리 내부의 값을 변경할 수 없으므로 개별 항목에 대한 할당 연산은 오류 발생
- 이와 같은 속성을 교환불가능(immutable)속성이라 함
>>>> t = (0, 1, 2, 3, 4)
>>>> t[0] = 100
...
TypeERror: 'tuple' pbject does not support item assignment
2.2.1 패킹과 언패킹
- 패킹(Packing): 하나의 변수에 여러 개의 값을 넣는 것을 의미
- 언패킹(Unpacking): 패킹된 변수가 있으면, 여기에서 여러 개의 값을 꺼내옴
2.2.2 슬라이싱
- 슬라이싱은 리스트나 튜플은 물론 문자열에 대해서도 적용 가능
>>>> tu = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
>>>> tu[1:5]
(1, 2, 3, 4)
>>>> tu[0:10:3]
(0, 3, 6, 9)
>>>> tu[::-1]
(9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
>>>> txt = 'hello world'
>>>> txt[1:5]
'ello'
>>>> txt[6:]
'world'
>>>> txt[::-1]
'dlrow olleh'
3. 셋(Set)
- 순서가 없는 자료형으로, 중복된 값을 허용하지 않음
- 교집합, 차집합, 합집합 등의 집합 연산 수행이 가능
3.1 집합 만드는 방법
>>>> set0 = set()
>>>> set1 = {1, 2, 3, 4}
>>>> day_list = ['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN']
>>>> day_set = set(day_list)
>>>> day_set
{'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'}
>>>> fruits_tuple = ('apple', ' orange', 'water melon')
>>>> fruuts_set = set(fruits_tuple)
>>>> fruits_set
{'apple', ' orange', 'water melon'}
>>>> h_str = 'hello'
>>>> h_set = set(h_str)
>>>> h_set
{'h', 'l', 'e', 'o'}
3.2 집합의 메소드
- add(x): 집합 내의 특정 원소 x를 추가
- discard(x): 집합 내의 특정 원소 x를 삭제
- clear(): 집합 내의 모든 원소 삭제
- union(s): s집합과의 합집합을 구함.
|연산과 동일
- diffierence(s): s 집합과의 차집합을 구함.
-연산과 동일
- intersection(s): s 집합과의 교집합을 구함.
&
- symmetric_differences(s): s 집합과의 대칭차집합을 구함.
^연산과 동일
- issubset(s): s 집합의 부분집합인가를 구하며, True/False를 반환
- issuperset(s): s 집합의 상위 집합인가를 구하며, True/False를 반환
- isdisjoint(s): s 집합과 서로소인가를 구하며, True/False를 반환