딕셔너리(Dictionary)
>> 딕셔너리 개념
딕셔너리의 의미는 기본적으로 '사전'입니다. 우리가 사전을 펼쳐보면 '단어'가 있고, 단어에 대한 '설명'이 쌍으로 묶여 있습니다. 파이썬의 딕셔너리 또한 같은 역할을 하는 자료 구조입니다. 사전에서의 단어를 나타내는 것이 '키(key)' 이며, 키에 묶여있는 것이 '값(value)'입니다. 다시 말해, 딕셔너리는 키와 값의 쌍을 저장할 수 있는 객체입니다. 여기서 주의할 점은, 키는 해시 가능한 객체여야 하고 중복되면 안됩니다. 반면에 값은 중복이 될 수 있습니다. 또한 값은 어떤 객체든지 가질 수 있지만 값은 변경 불가능한 객체(문자열, 숫자)로만 생성할 수 있습니다.
- 딕셔너리(Dictionary): 키(key)와 값(value)의 쌍을 저장할 수 있는 객체
- 키(key): 해시 가능한 객체, 중복 허용 안됨, 변경 불가능한 객체여야 함, 자료형 혼합 가능
- 값(value): 중복 허용
>> 딕셔너리 형식
딕셔너리는 아래와 같이 중괄호 안에 항목을 쉼표로 분리시켜 나열하면 됩니다. 이때, 항목은 키(key)와 값(value)로 구성됩니다.
딕셔너리 = { 키1: 값1, 키2: 값2, ... }
>> 공백 딕셔너리
공백 딕셔너리는 {}로 생성합니다.
dic = {}
>> 딕셔너리 항목 추출
딕셔너리의 항목을 꺼내고 싶으면, 키를 사용하면 됩니다. 키를 [ ] 안에 지정하는 방법을 사용해도 되고, get() 메소드를 사용할 수도 있습니다.
score = {'math': 100, 'korean': 95, 'history': 30}
print(score['math'])
print(score.get('history'))
'''
>>> 100
>>> 30
'''
>> 키가 없는 경우 (default)
키가 딕셔너리에 없으면 KeyError가 발생합니다. get() 사용 시 키가 없으면 None이 반환되는데요, 이때 디폴트 값을 사용하고자 하면 get()의 두 번째 인수로 디폴트 값을 전달하면 됩니다.
score = {'math': 100, 'korean': 95, 'history': 30}
print(score.get('science',80 ))
'''
>>> 80
'''
>> 키 존재 여부 확인 (in)
키가 딕셔너리에 있는지 확인하고자 할 때는 in 연산자를 사용합니다.
score = {'math': 100, 'korean': 95, 'history': 30}
print('math' in score)
print('music' in score)
'''
>>> True
>>> False
'''
>> 키 항목 추가, 삭제 (pop)
딕셔너리 자체는 변경 가능한 객체입니다. 따라서 항목을 추가하거나 삭제하는 것이 가능합니다. '딕셔너리[새로운키]=새로운 값' 형태로 항목을 추가할 수 있고, pop() 메소드를 사용하거나 del 키워드를 사용해 항목을 삭제할 수 있습니다.
score = {'math': 100, 'korean': 95, 'history': 30}
print(score)
print('---------------------')
score['science']=80
print(score)
print('---------------------')
score.pop('math')
print(score)
print('---------------------')
del score['history']
print(score)
'''
{'math': 100, 'korean': 95, 'history': 30}
---------------------
{'math': 100, 'korean': 95, 'history': 30, 'science': 80}
---------------------
{'korean': 95, 'history': 30, 'science': 80}
---------------------
{'korean': 95, 'science': 80}
'''
>> 키와 값을 함께 출력 (.items())
for 루프 사용 시, for item in score를 사용하면 키만 출력됩니다. 그러나 for item in score.items()을 사용하면 키와 값이 함께 출력됩니다.
score = {'math': 100, 'korean': 95, 'history': 30}
print('---------------------')
for item in score:
print(item, end = ' ')
print()
print('---------------------')
for item in score.items():
print(item, end = ' ')
'''
---------------------
math korean history
---------------------
('math', 100) ('korean', 95) ('history', 30)
'''
>> 딕셔너리 함축
리스트 함축과 비슷하게, 딕셔너리도 함축을 사용해 생성할 수 있습니다. {} 안의 (key: value)와 for문장으로 생성합니다.
pow_num = {x : x*x for x in range(4)}
print(pow_num)
'''
{0: 0, 1: 1, 2: 4, 3: 9}
'''
>> 딕셔너리 정렬
딕셔너리의 키는 근본적으로 순서가 없습니다. 딕셔너리를 생성할 때 아무리 신경써서 키 값을 순서대로 입력해도, 출력 시 어떤 순서로 출력될지는 알 수 없습니다. 이는 값도 마찬가지입니다. 대신, 딕셔너리의 키나 값들을 순서대로 나열한 리스트를 따로 생성할 수는 있습니다. sorted() 메소드를 사용하면 됩니다.
score = {'math': 100, 'korean': 95, 'history': 30, 'science': 88}
print(score)
print('----------------------')
print('sort by keys')
print(sorted(score))
print('----------------------')
print('sort by values')
print(sorted(score.values()))
'''
{'math': 100, 'korean': 95, 'history': 30, 'science': 88}
----------------------
sort by keys
['history', 'korean', 'math', 'science']
----------------------
sort by values
[30, 88, 95, 100]
'''
또는 딕셔너리의 값에 따라서 키들을 정렬하고 싶으면 sorted() 함수에 비교할 기준을 지정해 주어야 합니다.
score = {'math': 100, 'korean': 95, 'history': 30, 'science': 88}
print(score)
print('----------------------')
print(sorted(score, key = score.__getitem__))
'''
{'math': 100, 'korean': 95, 'history': 30, 'science': 88}
----------------------
['history', 'science', 'korean', 'math']
'''
>> 딕셔너리 함수
- 키만 출력: keys()
- 값만 출력: values()
score = {'math': 100, 'korean': 95, 'history': 30, 'science': 88}
print(score)
print(score.keys())
print(score.values())
'''
{'math': 100, 'korean': 95, 'history': 30, 'science': 88}
dict_keys(['math', 'korean', 'history', 'science'])
dict_values([100, 95, 30, 88])
'''
'Python' 카테고리의 다른 글
[Python] 자료구조 - collections 모듈 - deque (0) | 2023.11.10 |
---|---|
[Python] 자료 구조 - 문자열(string) (1) | 2023.10.31 |
[Python] 자료구조 - 튜플(tuple) (0) | 2023.10.30 |
[Python] 자료구조 - 스택(stack), 큐(queue) (0) | 2023.10.29 |
[Python] 파이썬 자료구조 종류 (0) | 2023.10.29 |