순서 X, 중복 X, 수정 O, 삭제 O
빈 딕셔너리 생성
empty_dic = {}
empty_dic = dict()
아무 값이 없는 빈 딕셔너리를 만들고, 값을이후에 추가하려면 위처럼 생성하면 됨.
딕셔너리 생성
딕셔너리명 = {key1:value1, key2:value2, ...}
dic = {3 : '치이카와', 100 : '농담곰', 55 : '하치와레'}
이때 키 값은 정수형만 가능한 것이 아니라 문자열도 넣을 수 있음.
리스트를 인덱스 값으로 접근한다면, 딕셔너리는 인덱스 역할을 key가 함.
딕셔너리명에 대괄호를 붙이고 그안에 key를 넣거나, get() 함수를 통해 key값에 해당하는 value값을 얻을 수 있음.
dic = {3 : '치이카와', 100 : '농담곰', 55 : '하치와레'}
print(dic[100])
print(dic.get(3))
결과
농담곰
치이카와
get() 함수를 통해 key에 해당하는 값이 없으면 기본값을 사용하게 할 수 있음.
dic = {3 : '치이카와', 100 : '농담곰', 55 : '하치와레'}
print(dic.get(9, "비어있음"))
결과
비어있음
key가 딕셔너리에 있는지 확인할때는 in 연산자를 사용한다.
dic = {3 : '치이카와', 100 : '농담곰', 55 : '하치와레'}
print(3 in dic)
print(60 in dic)
결과
True
False
딕셔너리 초기화
list1 = [3, 100, 55]
list2 = ['치이카와', '농담곰', '하치와레']
dic = dict(zip(list1, list2))
print(dic)
결과
{3: '치이카와', 100: '농담곰', 55: '하치와레'}
dict()와 zip()을 이용해 두개의 리스트의 요소들을 key와 value로 갖는 딕셔너리를 만들 수 있음.
이를 활용한 문제
백준 18870번 - 좌표 압축



import sys
n = int(sys.stdin.readline())
lst = list(map(int, sys.stdin.readline().split()))
sorted_lst = sorted(list(set(lst)))
idx_lst = [i for i in range(len(sorted_lst))]
dic = dict(zip(sorted_lst, idx_lst))
for i in lst:
print(dic[i], end=" ")
lst = [[3, '치이카와'], [100, '농담곰'], [55, '하치와레']]
dic = dict(lst)
print(dic)
결과
{3: '치이카와', 100: '농담곰', 55: '하치와레'}
dict() 인자에 2차원 리스트를 전달하면, 2차원 리스트의 요소들을 key와 value로 갖는 딕셔너리를 생성
lst = [3, 100, 55]
dic = dict.fromkeys(lst)
print(dic)
결과
{3: None, 100: None, 55: None}
fromkeys()에 인자로 리스트를 전달하면, 리스트의 요소들을 key로 갖는 딕셔너리가 생성
value는 None으로 설정됨.
아래와 같이 두번째 인자를 전달하면 그 값을 기본값 value로 딕셔너리를 초기화함.
lst = [3, 100, 55]
dic = dict.fromkeys(lst, '치이카와')
print(dic)
결과
{3: '치이카와', 100: '치이카와', 55: '치이카와'}
Comprehension을 이용
dic = {n: n*n for n in range(5)}
print(dic)
결과
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
lst = ['치이카와', '농담곰', '하치와레']
dic = {index:value for index, value in enumerate(lst)}
print(dic)
결과
{0: '치이카와', 1: '농담곰', 2: '하치와레'}
딕셔너리 value 값 변경/추가/삭제
key에 해당하는 값이 있을 때 -> 값 변경
key에 해당하는 값이 없을 때 -> 값 추가
dic = {3 : '치이카와', 100 : '농담곰', 55 : '하치와레'}
print(dic)
dic[60] = "랏코"
dic[55] = "모몽가"
print(dic)
결과
{3: '치이카와', 100: '농담곰', 55: '하치와레'}
{3: '치이카와', 100: '농담곰', 55: '모몽가', 60: '랏코'}
dic = {3 : '치이카와', 100 : '농담곰', 55 : '하치와레'}
del dic[55]
print(dic)
결과
{3: '치이카와', 100: '농담곰'}
dic = {3 : '치이카와', 100 : '농담곰', 55 : '하치와레'}
dic.clear()
print(dic)
결과
{}
값 확인
key값들만 확인하고 싶을때 -> keys()
value값들만 확인하고 싶을때 -> values()
전체를 다 확인하고 싶을때 -> items()
dic = {3 : '치이카와', 100 : '농담곰', 55 : '하치와레'}
print(dic.keys())
print(dic.values())
print(dic.items())
결과
dict_keys([3, 100, 55])
dict_values(['치이카와', '농담곰', '하치와레'])
dict_items([(3, '치이카와'), (100, '농담곰'), (55, '하치와레')])
dic = {3 : '치이카와', 100 : '농담곰', 55 : '하치와레'}
key_list=list(dic.keys())
value_list=list(dic.values())
print(key_list)
print(value_list)
결과
[3, 100, 55]
['치이카와', '농담곰', '하치와레']
딕셔너리 정렬
딕셔너리는 sort메서드가 없기 때문에 sorted함수를 사용해야함.
sorted() 함수는 정렬된 리스트를 반환하기 때문에
a = sorted(dic)를 하면 a에 정렬된 key값들이 리스트 형태로 반환됨
b = sorted(dic.keys()) 이것 또한 b에 정렬된 key값들이 리스트 형태로 반환됨.
c = sorted(dic.values())는 c에 정렬된 value값들이 리스트 형태로 반환됨.
d = sorted(dic.items())는 d에 key값 기준으로 정렬된 key, value값들이 튜플과 리스트 형태로 반환됨.
dic = { 2: 6, 3: 8, 5: 10, 1: 7, 4: 9 }
a = sorted(dic)
b = sorted(dic.keys())
c = sorted(dic.values())
d = sorted(dic.items())
print(a)
print(b)
print(c)
print(d)
결과
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[6, 7, 8, 9, 10]
[(1, 7), (2, 6), (3, 8), (4, 9), (5, 10)]
딕셔너리 정렬(?) 또한 lambda를 이용할 수 있음.
dic = { 2: 6, 3: 8, 5: 10, 1: 7, 4: 9 }
a = sorted(dic.items(), key=lambda x:x[0])
b = sorted(dic.items(), key=lambda x:x[1])
c = sorted(dic.items())
print(a)
print(b)
print(c)
결과
[(1, 7), (2, 6), (3, 8), (4, 9), (5, 10)]
[(2, 6), (1, 7), (3, 8), (4, 9), (5, 10)]
[(1, 7), (2, 6), (3, 8), (4, 9), (5, 10)]