key(키), value(값)가 한 쌍 으로 되어있는 순서가 없는 자료형
- 키는 immutable(불변) int, tuple, float, boolean 등
- 값은 mutable(가변) set, list, dict 등
my_dictionary = {}
# dict constructor
my_dictionary = dict()
my_dictionary = dict( 'key1' = 'value1', 'key2' = 'value2', 'key3' = 'value3' )
type(my_dictionary) # <class 'dict'>
값은 중복될 수 있지만 키는 중복될 수 없어 중복의 경우 마지막 값으로 덮어씌워짐
{"a" : 1, "a" : 2} # {'a': 2}
++ 추가)
사전형으로 변환
to_dict()
조회
- 순서가 없기 때문에 인덱스로 조회할 수 없어 키로 조회 (*인덱싱 불가)
my_dictionary = { 5: 25, 2: 4, 3: 9 }
my_dictionary[5] # 25
- 해당 key가 없을 때도 실행
a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
a.get('name') # 'pey'
a.get('phone') # '0119993323'
a.get('address', '등록된 주소가 없습니다.') # '등록된 주소가 없습니다'
추가
my_dictionary[9] = 81
# { 5: 25, 2: 4, 3: 9, 9: 81 }
삭제
del my_dictionary[3]
# { 5: 25, 2: 4, 9: 81 }
수정
- 키로 접근하여 값 변경 가능
d = {'abc': 1, 'def': 2}
d['abc'] = 5
# {'abc': 5, 'def': 2}
- 여러 값 변경 또는 추가 시 update 메서드 사용
a = {'alice': [1, 2, 3], 'bob': 20, 'tony': 15, 'suzy': 30}
a.update({'bob':99, 'tony':99, 'kim': 30})
# {'alice': [1, 2, 3], 'bob': 99, 'tony': 99, 'suzy': 30, 'kim': 30}
IN 메서드
딕셔너리의 존재 여부는 키의 한해서만 가능
my_dictionary = {
'key1': 'value1',
'key2': 'value2',
'key3': 'value3'
}
'key1' in my_dictionary # True
'key2' not in my_dictionary # False
'key4' not in my_dictionary # True
값의 존재 여부를 확인해야할 때
my_dictionary = {
'key1': 'value1',
'key2': 'value2',
'key3': 'value3'
}
'value1' in my_dictionary.values() # True
'value4' not in my_dictionary.values() # True
pprint 메서드
읽기 쉽게 보여줌
from pprint import pprint
a = {'alice': [1, 2, 3], 'bob': 20, 'tony': 15, 'suzy': 30,"dodo": [1,3,5,7], "mario": "pitch"}
print(a)
# {'alice': [1, 2, 3], 'bob': 20, 'tony': 15, 'suzy': 30, 'dodo': [1, 3, 5, 7], 'mario': 'pitch'}
pprint(a)
# {'alice': [1, 2, 3],
# 'bob': 20,
# 'dodo': [1, 3, 5, 7],
# 'mario': 'pitch',
# 'suzy': 30,
# 'tony': 15}
순서가 없는 자료형이기 때문에 나오는 순서를 보장할 수 없음 (순서는 임의적)
value 순회
for value in my_dictionary.values():
print(value)
key 순회
for key in my_dictionary.keys():
print(key)
dict.keys()는 딕셔너리의 key만을 모아 dict_keys() 객체를 돌려준다
파이썬 2.7 버전까지는 dict.keys() 호출 시 반환 값으로 리스트 반환
파이썬 3.0 버전 이후로 메모리 낭비를 줄이기 위해 dict_keys 객체 반환
리스트가 필요한 경우 list(dict.keys()) 사용해야 함
value, key 순회
for key, value in my_dictionary.items():
print(key, value)
얕은 복사(shallow copy) - 내용은 같으나 아이디가 같은 동일한 변수는 아님
a = {'alice': [1, 2, 3], 'bob': 20, 'tony': 15, 'suzy': 30}
b = a.copy()
b['alice'].append(5)
b # {'alice': [1, 2, 3, 5], 'bob': 20, 'tony': 15, 'suzy': 30}
a # {'alice': [1, 2, 3, 5], 'bob': 20, 'tony': 15, 'suzy': 30}
a = {'alice': [1, 2, 3], 'bob': 20, 'tony': 15, 'suzy': 30}
b = dict(a)
a # {'alice': [1, 2, 3], 'bob': 20, 'tony': 15, 'suzy': 30}
b # {'alice': [1, 2, 3], 'bob': 20, 'tony': 15, 'suzy': 30}
id(a) # 4334645680
id(b) # 4334648920
깊은 복사(deep copy) - 같은 아이디로 같은 변수 공유
import copy
a = {'alice': [1, 2, 3], 'bob': 20, 'tony': 15, 'suzy': 30}
b = copy.deepcopy(a)
b['alice'].append(5)
b # {'alice': [1, 2, 3, 5], 'bob': 20, 'tony': 15, 'suzy': 30}
a # {'alice': [1, 2, 3], 'bob': 20, 'tony': 15, 'suzy': 30}
[PYTHON] 탐색 알고리즘(선형탐색, 이진탐색) (0) | 2021.05.17 |
---|---|
[PYTHON] is와 == 비교 (0) | 2021.05.14 |
[PYTHON] 파이썬 자료형(1) 리스트(List) (0) | 2021.05.12 |
[PYTHON] 파이썬 파일 입출력 (0) | 2021.04.20 |
[PYTHON] 모듈(Module) (0) | 2021.04.20 |
댓글 영역