- 딕셔너리는 대응관계를 나타내는 자료형이다.
- 딕셔너리는 리스트, 튜플처럼 순차적인 요소가 아닌 key를 통해 value를 얻는 key : value 의 대응요소를 가지고 있다.
1. 딕셔너리 표현방식
person = {'name':'John', 'age':20, 'phone':'010-0000-1234'}
- 딕셔너리 자료형 person의 key는 'name', 'age', 'phone' 이다.
- 딕셔너리 자료형 person의 value는 'John', 20, '010-0000-1234' 이다.
a = {1:['a','b']} # value로 리스트 자료형도 가능하다.
b = {1:('a','b')} # value로 튜플 자료형도 가능하다.
2. 딕셔너리 쌍 추가
a = {1:'a'}
print(a) # {1: 'a'}
a[2] = 'b' # 2: 'b' 쌍 추가
print(a) # {1: 'a', 2: 'b'}
a['age'] = 20 # 'age': 20 쌍 추가
print(a) # {1: 'a', 2: 'b', 'age': 20}
a[3] = [10,20] # 3: [10,20] 쌍 추가
print(a) # {1: 'a', 2: 'b', 'age': 20, 3:[10,20]}
참고로 딕셔너리에서는 순차적으로 요소를 구하지 않고 key로 value를 얻으므로 순서는 신경쓸 필요 없다.
3. 딕셔너리 쌍 삭제
print(a) # 현재 a = {1: 'a', 2: 'b', 'age': 20, 3: [10,20]}
del a[2] #key가 2인 key:value 쌍 삭제 << del a[key] 는 a의 key:value 쌍 삭제
a의 index 2 항목이 아니라는 것을 명심해야한다.
print(a) # {1: 'a', 'age': 20, 3: [10,20]}
4. 딕셔너리 쌍 사용
- 딕셔너리 자료형은 보통 공통의 분류 항목에 대한 다른 값을 저장할 때 쓴다.
- 이는 리스트나 튜플 자료형으로 표현하기는 어렵다.
각 휴대폰 브랜드마다 제조사의 데이터를 담고 싶은 경우를 예로 들어보자.
phone = {'galaxy':'Samsung', 'V20':'LG', 'G8':'LG', 'vega':'PanTech', 'iPhone':'Apple'}
print(phone['vega']) # 'PanTech'
print(phone['galaxy']) # 'Samsung'<code></code>
- 리스트나 튜플에서는 인덱싱, 슬라이싱을 활용해 요소를 얻었다.
- 딕셔너리에서는 key를 이용하는 방법 하나 뿐이다.
- 딕셔너리 변수[key] 를 이용해서 key에 해당하는 value를 얻는다.
5. 주의사항
- key 중복 금지
- 딕셔너리에서 key는 고유한 값이어야 한다.
- 같은 key값이 2개 이상 존재할 경우 1나를 제외한 나머지는 모두 무시된다.
- 어떤 key값이 무시될 지는 예측할 수 없다. 따라서 중복되지 않도록 주의하자.
a = {'name':'John', 'age':20, 'name':'Kelly', 'name':'Jack'}
print(a['name']) # 'John' 혹은 'Kelly' 혹은 'Jack'
- key로 리스트 자료형 사용 금지
- 리스트 자료형은 그 값이 변할 수 있기 때문에 key로 사용 불가능
- key로 튜플 자료형은 사용 가능하다.
- 튜플 자료형은 그 값이 변하지 않기 때문에 key로 사용 가능하다.
- 딕셔너리의 key로 사용할 수 있냐 없냐는 값이 변할 수 있느냐 없느냐에 달려있다.
- 딕셔너리의 value로는 변하는 값이든 변하지 않는 값이든 사용 가능하다.
6. 딕셔너리 관련 함수
phone = {'galaxy':'Samsung', 'V20':'LG', 'G8':'LG', 'vega':'PanTech', 'iPhone':'Apple'}
1) key로 이루어진 list 만들기
phone.keys() # 딕셔너리 phone의 key들로만 이루어진 dict_keys 객체를 리턴
print(phone.keys()) # dict_keys(['galaxy', 'V20', 'G8', 'vega', 'iPhone'])
print(list(phone.keys())) # ['galaxy', 'V20', 'G8', 'vega', 'iPhone']
- list를 만들고 싶으면 list() 함수를 사용하면 된다.
- Python 3.0 버전 이전에는 애초에 list를 리턴하였으나 3.0 이후 메모리 낭비의 문제로 dict_keys로 리턴
for k in phone.keys():
print(k+" is made by "+phone[k])
list() 함수를 써서 리스트로 변환하지 않더라도 dict_keys의 요소에 관한 반복문을 실행할 수 있다.
2) value로 이루어진 list 만들기
phone.values() # 딕셔너리 phone의 value들로만 이루어진 dict_values 객체 리턴
print(phone.values()) # dict_values(['Samsung', 'LG', 'LG', 'PanTech', 'Apple'])
print(list(phone.values())) # ['Samsung', 'LG', 'LG', 'PanTech', 'Apple']
3) key,value 쌍 구하기
phone.items() # dict_items([('galaxy','Samsung'), ('V20','LG'),('G8','LG'),('vega','PanTech'),('iPhone','Apple')])
dict_keys, dict_values, dict_items 등의 객체는 정수, 문자열, 리스트 등과는 다르게 하나의 사용자 정의 자료형이다.
phone.items() # dict_items([('galaxy','Samsung'), ('V20','LG'),('G8','LG'),('vega','PanTech'),('iPhone','Apple')])
### dict_keys, dict_values, dict_items 등의 객체는 정수, 문자열, 리스트 등과는 다르게 하나의 사용자 정의 자료형이다.
type(phone.items()) # <class 'dict_items'>
a = list(phone.items()) # [('galaxy','Samsung'), ('V20','LG'),('G8','LG'),('vega','PanTech'),('iPhone','Apple')]
type(a) # <class 'list'>
type(a[0]) # <class 'tuple'>
list(phone.items())는 리스트 안에 튜플이 있는 구조인 것이었다.
4) key,value 쌍 지우기
phone.clear() # 딕셔너리 phone 요소들 모두 지우기
print(phone) # {}
5) key로 value를 얻는 또다른 방법 .get() 함수
phone = {'galaxy':'Samsung', 'V20':'LG', 'G8':'LG', 'vega':'PanTech', 'iPhone':'Apple'}
phone.get('vega') # 'PanTech'
phone['vega']와 phone.get('vega')는 같은 결과를 return 한다.
phone['G4'] # phone에 'G4'라는 key가 없어서 Key Error를 일으킨다.
phone.get('G4') # phone에 'G4'라는 key가 없어서 None을 반환한다.
print(phone.get('G4')) # None
6) 해당 key가 딕셔너리에 존재하는지 조사하기
'galaxy' in phone # True 리턴
'G4' in phone # False 리턴
'프로그래밍 언어 > Python' 카테고리의 다른 글
(Python) 7 - 자료형(7) - 참과 거짓(True False) (0) | 2020.05.16 |
---|---|
(Python) 6 - 자료형(6) - 집합(Set) (0) | 2020.05.16 |
(Python) 4 - 자료형(4) - 튜플(Tuple) (0) | 2020.05.16 |
(Python) 3 - 자료형(3) - 리스트(List) (0) | 2020.05.16 |
(Python) 2 - 자료형(2) - 문자열(String) (0) | 2020.05.16 |