이번 강좌에서는 파이썬에 키와 값(key-value)을 같이 저장 할 수 있는 dictionary 시퀀스에 대해 알아 보도록 한다.
목차
딕셔너리(Dictionary) 란?
- "키"와 "값" 형태로 데이터를 저장하는 자료구조.
- 중복키를 허용하지 않는다.
- 타입 이름으로 "dict"를 사용한다.
- 배열 연산자를 통해 요소 접근이 가능하다.
- 수정이 가능한 mutable 타입이다.
딕셔너리(Dictionary)의 생성
1. 타입 이름 'dict' 사용
# 타입 이름 'dict'를 이용해 생성
d = dict(name = "kim", age = 20, addr = "seoul")
print(d) # {'name': 'kim', 'age': 20, 'addr': 'seoul'}
2. 중괄호 '{}' 사용
셑(set)과 동일하게 중괄호를 사용하지만 요소가 하나만 들어간 셑과는 달리 딕셔너리는 중괄호 '{}' 를 사용 할 때, 콜론(:)으로 키와 값을 구분한다.
# 중괄호를 이용해 생성
d = { "name" : "kim", "age" : 20, "addr" : "seoul" }
print(d) # {'name': 'kim', 'age': 20, 'addr': 'seoul'}
위의 두가지 생성 방법은 동일한 결과를 만들지만 생성하는 포멧이 많이 다르다. 특히 타입 이름 'dict'를 이용해 딕셔너리를 생성 할 때 지금까지 보지 못한 형태의 파라메터 전달이 보인다.
name='kim' 형태는 '키워드 파라메터'라고하며, 값을 넘길 때 키를 지정해서 넘기는 방식이다. 자세한 사항은 함수를 다룰 때 자세히 설명하도록 하겠다.
3. Dictionary Comprehension
d = { i : char(65 + i) for i in range(4) }
print(d) # {0 : 'A', 1 : 'B', 2 : 'C', 3 : 'D'}
dictionary의 사용
dictionary 요소에 접근 방법
# dictionary 요소에 접근
# [] 연산자 사용
print(d['addr']) # seoul
# get 메소드 사용
print(d.get('addr')) # seoul
[] 와 get 메소드는 둘 다 요소에 접근하는데 사용 되지만, [] 연산자의 경우 해당 키가 dictionary에 없으면 KeyError 예외를 발생 시킨다. get 메소드는 예외를 발생 시키는 대신 None을 리턴한다.
print(d['weight']) # KeyError: 'weight'
print(d.get('weight')) # None
print(d.get('weight', 'Unknown')) # Unknown
get의 두번째 인자는 키를 찾지 못하는 경우 대신 리턴된다.
새로운 key/value 생성
d['weight'] = 60
print(d) # {'name': 'kim', 'age': 20, 'addr': 'seoul', 'weight': 60}
dictionary 의 모든 key 조사
keys() 메소드를 이용해 딕셔너리의 모든 키를 가진 dict_keys 라는 iterable 객체를 리턴한다.
keys = d.keys()
print(keys) # dict_keys(['name', 'age', 'addr', 'weight'])
for k in keys :
print(k, end=",") # name, age, addr
dictionary 의 모든 value 조사
values() 메소드를 이용해 딕셔너리의 모든 값을 가진 dict_values 라는 iterable 객체를 리턴한다.
values = d.values()
print(values) # dict_values(['kim', 20, 'seoul', 60])
for v in values :
print(v, end=", ") # kim, 20, seoul, 60,
dictionary 의 모든 key, value 조사
items() 메소드를 이용해 딕셔너리의 모든 키와 값을 가진 dict_items라는 iterable 객체를 리턴한다. dict_items 객체는 튜플을 이용해 키와 값을 구분해 가지고 있다.
items = d.items()
print(items) # dict_items([('name', 'kim'), ('age', 20), ('addr', 'seoul'), ('weight', 60)])
for i in items :
print(i, end=", ") # ('name', 'kim'), ('age', 20), ('addr', 'seoul'), ('weight', 60),
dictionary가 키를 가지고 있는지 조사
print('age' in d) # True
모든 요소 지우기
d.clear()
마치며
이것으로 모든 파이썬 시퀀스들에 대해 살펴 보았다. 다음은 파이썬의 함수에 대해 알아 보는 시간을 가지도록 하겠다.