개요
딕셔너리(Dictionary)는 줄여서 dict 으로도 표현된다. 키(Key)와 값(Value)로 저장된다. 값의 경우 변수처럼 어떤 자료형이라도 담을 수 있다. 단, 키를 기준으로 중복을 허용하지 않는다.
이름에서 추측되는 것과 같이 영어사전이나 국어사전에서 어떤 단어의 뜻을 찾을 때 단어 혹은 키워드를 기준으로 먼저 찾고 거기에 해당되는 정보를 보는 것처럼 딕셔너리 자료형도 키워드를 키로 사용하여 해당되는 값을 찾을 수 있는 구조이다.
이런 딕셔너리 자료형은 많은 정보를 사전에 만든다음에 키워드로 찾는 것처럼 검색하는 것에 특화 되어 있다. 그리고 실제로 검색도 빠른 편이다.
리스트 같은 순차적으로 저장되어 있는 경우 순서대로 정보를 확인하면서 검색을 해야하지만, 딕셔너리는 이미 검색할 키워드와 해당 값이 구분 되어 있기에 검색에서 유리하다. 대신 딕셔너리 자료형을 메모리에 생성할 때(저장 할 때)는 느린 편이다.
다른 언어인 C, C++ 같은 프로그래밍 언에어서는 파이썬의 딕셔너리 자료형과 유사한 것으로 해쉬 테이블(hash table), 해쉬 맵(hash map)이 있다.
정의
중괄호를 열고 닫음으로 정의 할 수 있다. 키 값은 항상 문자열(str)로 정의 되어야 한다.
a = { "name": "홍길동", 'dob': 1990 }
a
# { "name": "홍길동", "dob": 1990 }
b = {}
b
# {}
읽기
딕셔너리가 정의 되어 있는 변수에 대괄호를 붙여서 대괄호 안에 문자열로 키 값을 적으면 해당 값이 있는 경우 값을 불러오고 값이 없는 경우 에러가 발생한다.
c = {"name": "홍길동", "dob": 1990 }
c["name"]
# "홍길동"
c['name']
# "홍길동"
tmp = "name"
c[tmp]
# "홍길동"
c["address"]
# error:
수정 및 추가
읽는 경우와 비슷하나 조금 다르다. 대입 연산의 왼쪽에 딕셔너리 변수가 있으면 오른쪽의 값이 대입된다. 이 때 해당 키와 값이 없는 경우 새로 추가된다.
d = {"name": "마동석", "dob": 1988 }
d["name"] = "마동탁"
d
# {"name": "마동탁", "dob": 1988 }
d["address"] = "성남"
d
# {"address": "성남", "name": "마동탁", "dob": 1988 }
d[0]
# Error
요소 삭제
한쌍의 키와 값을 삭제할 수 있다. 삭제시 키를 중심으로 삭제된다.
d = {"name": "마동석", "dob": 1988, "address": "성남" }
del d["address"]
d
# {"name": "마동석", "dob": 1988 }
key in dict
딕셔너리 자료형에서 키가 포함되어 있는지 확인할 수 있다. 해당 키가 포함되어 있다면 True 포합되지 않았다면 False를 반환한다.
d = {"name": "마동석", "dob": 1988, "address": "성남" }
"name" in d
# True
"phone" in d
# False
주의할점
딕셔너리는 하위 단계(level)에 같은 이름의 키와 값을 정의 할 수 있다. 그러나 같은 단계(Level)에서 키가 중복으로 정의 할 수 없다. 만약 시도할 경우 덮어 써진다.
d = { "name" : "홍길동", "출신": {"출신": "서울"} }
# Error 아님
e = { "name" : "홍길동", "출신": "서울", "출신": "부산" }
# 마지막 꺼로 덮어 써짐
파이썬의 딕셔너리는 키가 문자열이면 대부분 사용이 가능하다. 심지어 공백문자(White space: 띄어쓰기나 줄바꿈)를 키로 사용이 가능하다. 그러나 가능하면 공백문자를 사용하지 않을 것을 권장한다. 이는 다른 프로그래밍 언어간 호환성을 위해서 이다.
a = {" ": "hello"}
a
# {" ": "hello"}
a[" "]
# "hello"
'Python > 배경이 있는 파이썬' 카테고리의 다른 글
코드 블록, 조건문(if) (1) | 2024.05.01 |
---|---|
불(bool)과 연산 (0) | 2024.04.29 |
튜플(Tuple) (1) | 2024.04.27 |
리스트(list) (0) | 2024.04.27 |
문자열(str) (1) | 2024.04.27 |