[Python] 파이썬 딕셔너리란? : https://nirsa.tistory.com/43?category=861479
-
1. 딕셔너리 키-값 쌍 추가
- setdefault : 키-값 쌍 추가
- update : 키 값 수정, 만약 키가 없다면 키-값 쌍 추가
setdefault는 딕셔너리의 키-값 쌍을 추가 합니다. 만약 키만 지정하고 값을 지정하지 않는다면 None를 저장 하게 됩니다. 만약 키-값을 추가할 경우 값을 저장하면서 입력했던 값을 반환 합니다.
# 테스트를 위한 딕셔너리 생성
x = {'a': 1, 'b': 2, 'c':3}
# 키만 지정
x.setdefault('d')
print(x)
결과값 : {'a': 1, 'b': 2, 'c': 3, 'd': None}
# 키-값 지정
x.setdefault('e', 5)
결과값 : 5
print(x)
결과값 : {'a': 1, 'b': 2, 'c': 3, 'd': None, 'e': 5}
update는 키 값을 수정하고 만약 지정한 키가 없다면 키-값 쌍을 추가 합니다.
# 테스트를 위한 딕셔너리 생성
x = {'a': 1, 'b': 2, 'c':3}
# b를 20으로 변경
x.update(b=20)
print(x)
결과값 : {'a': 1, 'b': 20, 'c': 3}
# 없는 키(d)를 지정하여 키-값 생성
x.update(d=50)
print(x)
결과값 : {'a': 1, 'b': 20, 'c': 3, 'd': 50}
또한 update는 키가 문자열일때만 사용 할 수 있는데, 키가 숫자일 경우 {}으로 한번 더 묶어줘서 딕셔너리 형태로 사용해주어야 합니다.
# 테스트를 위한 딕셔너리 생성
x = {1: 'a', 2: 'b', 3: 'c'}
x.update({1: 'aa', 3:'cc'})
print(x)
결과값 : {1: 'aa', 2: 'b', 3: 'cc'}
-
2. 딕셔너리 키-값 쌍 제거
- pop : 특정 키-값 삭제 후 삭제된 값 반환
- popitem : 마지막 키-값 쌍 삭제 후 튜플로 반환
- clear : 모든 키-값 삭제
pop은 특정 키-값을 삭제 하고 삭제된 값을 반환 합니다. 만약 키 뒤에 숫자를 입력 하면 해당 키가 없을 경우 입력했던 숫자를 반환 합니다.
x = {'a': 1, 'b': 2, 'c':3}
# pop(키)
x.pop('a')
결과값 : 1
print(x)
결과값 : {'b': 2, 'c': 3}
# 키가 없을 경우 설정한 -1 반환
x = {'b': 2, 'c':3}
x.pop('a', -1)
결과값 : -1
popitem은 마지막 키-값 쌍 삭제 후 튜플로 반환 합니다. (Python 3.5 이하 버전에서는 마지막이 아닌 임의의 키-값을 삭제 합니다.)
x = {'a': 1, 'b': 2, 'c':3}
x.popitem()
결과값 : ('c', 3)
print(x)
결과값 : {'a': 1, 'b': 2}
clear는 모든 키-값을 삭제 합니다.
x = {'a': 1, 'b': 2, 'c':3}
x.clear()
print(x)
결과값 : {}
-
3. 딕셔너리 키-값 가져오기
- items : 키-값 쌍을 모두 가져옴
- keys : 키를 모두 가져옴
- values : 값을 모두 가져옴
위의 키-값을 가져오는 메서드 들은 키던 값이던 모두 가져오게 됩니다. 일반적으로 for문과 같이 사용하여 키나 값만을 가져오거나 if 조건문을 통해 특정 값이나 키일 경우 가져오거나 삭제 등을 할 수 있습니다.
items는 키-값 쌍을 모두 가져 옵니다.
x = {'a': 1, 'b': 2, 'c':3}
x.items()
결과값 : dict_items([('a', 1), ('b', 2), ('c', 3)])
## for문을 이용해 키-값 가져오기
x = {'a': 1, 'b': 2, 'c':3}
for key, value in x.items():
print(key, value)
# 결과값
a 1
b 2
c 3
key는 키를 모두 가져 옵니다.
x = {'a': 1, 'b': 2, 'c':3}
x.keys()
결과값 : dict_keys(['a', 'b', 'c'])
## for문을 이용해 키 가져오기
x = {'a': 1, 'b': 2, 'c':3}
for key in x.keys():
print(key)
# 결과값
a
b
c
values는 값을 모두 가져 옵니다.
x = {'a': 1, 'b': 2, 'c':3}
x.values()
결과값 : dict_values([1, 2, 3])
## for문을 이용해 값 가져오기
for value in x.values():
print(value)
# 결과값
1
2
3
-
4. 딕셔너리 복사
딕셔너리 복사는 copy를 사용 합니다. 변수 형식으로 어떤 딕셔너리에 다시 딕셔너리를 선언할 경우 그 둘은 같은 객체가 되어 값 삭제, 추가, 수정 등에 모두 영향을 받게 됩니다. 아래 코드를 확인하여 z=x식으로 딕셔너리를 할당할 경우 같은 객체가 되는것을 확인해 주세요.
x = {'a': 1, 'b': 2, 'c':3}
# x 딕셔너리를 z 딕셔너리로 할당
z = x
# z와 x는 같은 객체임을 확인
z is x
결과값 : True
# 딕셔너리 x의 a키 값을 5로 수정
x.update(a=5)
# 딕셔너리 x와 z 모두 변경된 내용 확인
print(x)
{'a': 5, 'b': 2, 'c': 3}
print(z)
{'a': 5, 'b': 2, 'c': 3}
이러한 이유로 리스트, 딕셔너리 등을 복사할 때는 copy를 사용 합니다.
x = {'a': 1, 'b': 2, 'c':3}
# x 딕셔너리를 z 딕셔너리로 할당
z = x.copy()
# z와 x는 다른 객체임을 확인
z is x
결과값 : False
# 딕셔너리 x의 a키 값을 5로 수정
x.update(a=5)
# 딕셔너리 x에만 변경된 내용 확인
print(x)
{'a': 5, 'b': 2, 'c': 3}
print(z)
{'a': 1, 'b': 2, 'c': 3}
만약 중첩 딕셔너리를 복사 하려면 copy 모듈의 deepcopy 함수를 사용 해야 합니다.
# 중첩 딕셔너리 생성
x = {'a': {'python': 3.7}, 'b': {'python': 3.8}}
# copy 모듈을 불러온 후 deepcopy 사용
import copy
y = copy.deepcopy(x)
# 딕셔너리 y안의 딕셔너리 a의 키 python 값을 2.7.1로 변경
y['a']['python'] = '2.7.1'
# 각 딕셔너리의 변동 사항이 다른것을 확인
print(x)
결과 값 : {'a': {'python': 3.7}, 'b': {'python': 3.8}}
print(y)
결과 값 : {'a': {'python': '2.7.1'}, 'b': {'python': 3.8}}
중첩 딕셔너리는 아주 간단하게 그림으로 표현하면 아래와 같이 됩니다. 딕셔너리 안에 또다른 딕셔너리가 있는 개념 입니다.
'Programming > Python' 카테고리의 다른 글
[Python 3.7] 파이썬 회문 판별과 N-gram (4) | 2020.02.03 |
---|---|
[Python 3.7] 파이썬 파일 사용법 (쓰기/읽기, 자동으로 파일 객체 닫기, 파일 내용 불러오기, 파이썬 객체 파일에 쓰기/읽기) (0) | 2020.02.03 |
[Python 3.7] 파이썬 문자열 서식 지정자, 포매팅 사용법 (1) | 2020.02.03 |
[Python 3.7] 파이썬 문자열 메서드 사용법 (replace, translate, split, join, upper, lower, strip, lstrip, rstrip, just, ljust, rjust, zfill, find, rfind, count) (1) | 2020.02.03 |
[Python 3.7] 파이썬 리스트 사용법 (2) | 2020.01.30 |