본문 바로가기

Programming/Python

Do it! 공부단 2일차 | ch02 자료형_딕셔너리, 집합, 불

01 딕셔너리 자료형

  • 대응 관계를 가진 자료형을 연관 배열(Assocative array) 또는 해시(Hash)라고 한다.
  • 파이썬에서는 이러한 자료형을 딕셔너리(Dictionary)라고 한다.
  • 딕셔너리는 Key와 Value를 한 쌍으로 갖는다.
  • 딕셔너리는 리스트나 튜플처럼 순차적으로 요소 값을 구하지 않고 Key를 통해 Value를 얻는다.

 

01-1 딕셔너리 만들기

딕셔너리명 = {Key1:Value1, Key2:Value2, Key3:Value3, ···}

 

  • 딕셔너리 각각의 요소는 Key : Value 형태로 이루어져 있고 쉼표(,)로 구분된다.
  • Key에는 변하지 않는 값을 사용하고, Value에는 변하는 값과 변하지 않는 값 모두 사용할 수 있다.

 

여러 딕셔너리의 형태를 보자.

>>> dic1 = {'name':'donghae', 'phone':'010-0000-0000', 'birth':'0000'}
>>> dic2 = {'a':[1,2,3], 'b':[4,5,6]}
>>> dic3 = {(1,2,3):'a'}

 

01-2 딕셔너리 쌍 추가, 삭제하기

딕셔너리 쌍 추가하기

변수명[Key] = Value 형태로 쌍을 추가한다.

>>> a = {1: 'a'}
>>> a[2] = 'b'
>>> a
{1: 'a', 2: 'b'}

 

 

딕셔너리 쌍 삭제하기(del)

del 변수명[Key] 형태로 Key에 해당하는 {key : value} 쌍을 삭제한다.

>>> a = {1: 'a', 2: 'b'}
>>> del a[1]
>>> a
{2: 'b'}

 

01-3 딕셔너리 사용하기

  • 딕셔너리는 요솟값을 얻고자 할 때 인덱싱이나 슬라이싱을 사용할 수 없다.
  • Value를 얻기 위해서는 오직 딕셔너리 변수명[Key]을 사용한다.
  • 딕셔너리의 Key는 고유한 값이므로 중복되는 Key를 설정하면 하나를 제외한 나머지가 모두 무시된다.
  • Key는 변하지 않는 값을 사용해야 하기 때문에 리스트를 쓸 수 없다.

 

01-4 딕셔너리 관련 함수

Key 리스트 만들기(keys)

변수명.keys()는 딕셔너리의 Key만을 모아서 dict_keys 객체를 돌려준다.

>>> dic1 = {'name':'donghae', 'phone':'010-0000-0000', 'birth':'0000'}
>>> dic1.keys()
dict_keys(['name', 'phone', 'birth'])

 

이때 dict_keys객체는 리스트가 아니며 리스트가 필요한 경우 list(변수명.keys())를 사용한다.

>>> list(dic1.keys())
['name', 'phone', 'birth']

 

dict_keys 객체는 리스트를 사용하는 것과 차이가 없지만 append, insert, pop, remove, sort 함수는 수행할 수 없다. 대신 기본적인 반복 구문(예) for문)을 실행할 수 있다.

 

 

Value 리스트 만들기(values)

Value도 Key의 리스트를 얻는 방법과 동일하다.

>>> dic1 = {'name':'donghae', 'phone':'010-0000-0000', 'birth':'0000'}
>>> dic1.values()
dict_values(['donghae', '010-0000-0000', '0000'])

 

 

Key, Value 쌍 얻기(items)

items 함수는 Key와 Value의 쌍을 튜플로 묶은 값을 dict_items 객체로 돌려준다.

>>> dic1.items()
dict_items([('name', 'donghae'), ('phone', '010-0000-0000'), ('birth', '0000')])

 

 

Key: Value 쌍 지우기(clear)

>>> dic1.clear()
>>> dic1
{}

빈 리스트를 [], 빈 튜플을 ()로 표현하는 것처럼 빈 딕셔너리도 {}로 표현한다.

* 빈 딕셔너리는 변수명 = dict()로 생성할 수 있다.

 

 

Key로 Value 얻기(get)

get 함수는 x라는 Key에 대응되는 Value를 돌려준다.

>>> dic1 = {'name':'donghae', 'phone':'010-0000-0000', 'birth':'0000'}
>>> dic1.get('name')
'donghae'

 

변수명.get(Key)는 변수명[Key]과 같은 기능을 한다. 하지만 존재하지 않는 Key로 값을 가져오려고 할 경우 전자는 None을 돌려주고, 후자는 Key 오류를 발생시킨다. 

>>> print(dic1.get('nokey'))
None
>>> print(dic1['nokey'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'nokey'

 

 

특정 Key가 딕셔너리에 있는지 조사하기(in)

>>> dic1 = {'name':'donghae', 'phone':'010-0000-0000', 'birth':'0000'}
>>> 'name' in dic1
True
>>> 'email' in dic1
False

 

02 집합 자료형

집합(set)은 파이썬 2.3부터 지원하기 시작한 자료형이다.

 

02-1 집합 만들기

집합 자료형은 set 키워드를 사용해 만든다. 

 

여러 집합의 형태를 보자.

>>> s1 = set([1,2,3])
>>> s2 = set("Hello")
>>> s3 = set((8,9,10,11))
>>> s4 = set()
>>> s1
{1, 2, 3}
>>> s2
{'l', 'o', 'H', 'e'}
>>> s3
{8, 9, 10, 11}
>>> s4
set()

 

02-2 집합의 특징

위 집합의 형태 중 s2를 유심히 보자. s2를 통해 집합의 2가지 큰 특징을 알 수 있다.

 

  • 집합은 중복을 허용하지 않는다.
  • 집합에는 순서가 없다(unordered).

 

이는 다음을 의미한다.

  • 중복을 허용하지 않기 때문에 중복을 제거하는 필터 역할로 종종 사용된다. 
  • 순서가 있는(ordered) 리스트나 튜플과 달리 집합은 순서가 없어 인덱싱으로 값을 얻을 수 없다.
  • 인덱싱으로 set 자료형에 접근하려면 먼저 리스트나 튜플로 변환시켜야 한다. 

 

02-3 교집합, 합집합, 차집합 구하기

두 개의 set 자료형을 만든 후 교집합, 합집합, 차집합을 구해보자.

>>> s1 = set([1,2,3,4,5,6])
>>> s2 = set([4,5,6,7,8,9])

 

 

교집합

>>> s1 & s2
{4, 5, 6}

& 기호 혹은 intersection 함수를 사용한다.

 

 

합집합

>>> s1 | s2
{1, 2, 3, 4, 5, 6, 7, 8, 9}

| 기호 혹은 union 함수를 사용한다.

 

 

차집합

>>> s1 - s2
{1, 2, 3}
>>> s2 - s1
{8, 9, 7}

- 기호 혹은 difference 함수를 사용한다.

 

02-4 집합 자료형 관련 함수

값 1개 추가하기(add)

>>> s1 = set([1,2,3,4,5,6])
>>> s1.add(7)
>>> s1
{1, 2, 3, 4, 5, 6, 7}

 

 

값 여러개 추가하기(update)

>>> s = set([1,2,3])
>>> s.update([4,5,6])
>>> s
{1, 2, 3, 4, 5, 6}

 

특정 값 제거하기(remove)

>>> s = set([1,2,3])
>>> s.remove(3)
>>> s
{1, 2}

 

03 불 자료형

  • 불(bool)은 참(True)과 거짓(False)을 나타낸다.
  • 불 자료형은 True와 False 두 가지 값만을 가진다.
  • True와 False는 파이썬의 예약어로 첫 문자를 항상 대문자로 사용해야 한다.
>>> a = True
>>> b = False
>>> type(a)
<class 'bool'>
>>> type(b)
<class 'bool'>

* type(x) 함수는 x의 자료형을 확인하는 파이썬 내장 함수이다.

 

03-1 자료형의 참과 거짓

  • 문자열, 리스트, 튜플, 딕셔너리 등의 값이 비어있으면("", [], (), {}) 거짓이 된다.
  • 숫자에서는 그 값이 0일 때 거짓이 된다.
  • None 값은 거짓을 의미한다.

 

간단한 예시를 보자.

>>> a = [1,2,3,4]
>>> while a:
...     a.pop()
...
4
3
2
1

while 조건문을 사용한 두 번째 줄은 'a가 참인 동안'을 의미한다. 그렇기 때문에 리스트가 비면([]) while문 조건이 거짓이 되어 프로그램이 중지된다.

 

03-2 불 연산

bool 내장 함수를 사용해 자료형의 참과 거짓을 알아낼 수 있다.

 

>>> bool([1,2,3])
True
>>> bool([])
False
>>> bool(0)
False
>>> bool(3)
True
>>> bool("")
False

 


이 글은 책 『Do it! 점프 투 파이썬』을 읽은 후 작성한 글입니다.

 

Do it! 점프 투 파이썬

코딩을 처음 배우는 중·고등학생과 나만의 경쟁력을 갖추고 싶은 문과생, 소프트웨어 시대에 대비하여 새로운 스펙을 준비하려는 직장인까지! 모두 ‘점프 투 파이썬’으로 프로그래밍을 시작

www.easyspub.co.kr