파이썬(Phython)의 dictionary 는 Java 의 Hashmap 에 해당되는 기능이다.
dictionary
- 키와 값을 갖는 데이터 구조
- 키는 내부적으로 hash 값으로 저장
- 순서를 따지지 않음. 즉, 인덱스가 없음
dictionary type은 immutable한 키(key)와 mutable한 값(value)으로 맵핑되어 있는 순서가 없는 집합
x = dict() 또는 { } 로 선언한다.
print(x) 를 하면 { } 로 출력된다.
# 값은 중복될 수 있지만, 키가 중복되면 마지막 값으로 덮어쓰기된다.
# 순서가 없기 때문에 인덱스로는 접근할수 없고, 키로 접근 할 수 있다.
key는 변할 수 없는 자료형. ← 리스트는 안되고, 튜플은 된다.
리스트는 [index] 로 값을 확인하고,
딕셔너리는 [key] 로 값을 확인한다.
x = {
"name" : "홍길동",
"age" : 25,
0 : "Hello",
1 : "How are you?"
}
print(x)
# 출력 결과는 {'name': '홍길동', 'age': 25, 0: 'Hello', 1: 'How are you?'}
print(x["name"])
print(x["age"])
# dictionary의 in은 키에 한해서 동작한다.
# age 이라는 key가 x에 들어 있나요?
print("age" in x) # True
# dictionary 에 있는 모든 키를 보여줘.
print(x.keys())
# 출력 결과 : dict_keys(['name', 'age', 0, 1])
# 반복문 for key in 딕셔너리:
for key in x:
print("key: " + str(key) + ", value: " + str(x[key]))
|
항목 추가
x = {
"name" : "홍길동",
"age" : 25,
0 : "Hello",
1 : "How are you?"
}
# 자료 추가하기 : mutable 한 객체이므로 키로 접근하여 값을 변경할 수 있다.
x["school"] = "파이썬 강좌"
print(x)
# 출력결과 : {'name': '홍길동', 'age': 25, 0: 'Hello', 1: 'How are you?', 'school': '파이썬 강좌'}
|
# 1. 대응 관계가 5개 있는 Dictionary를 만들고, 이를 변수 my_dict에 넣어봅시다.
my_dict = {1:"one", 2:"two", 3:"three", 4:"four", 5:"five"}
# 2. 다음 두 메서드를 이용해서, Dictionary의 Key값들을 담은
# 변수 var1과 Value값들을 담은 변수 var2를 만들어봅시다. var1 = my_dict.keys()
var2 = my_dict.values()
print(var1) # dict_keys([1, 2, 3, 4, 5])
print(var2) # dict_values(['one', 'two', 'three', 'four', 'five'])
|
응용예제
# list
fruit = ["사과", "사과", "바나나", "딸기", "바나나", "키위", "복숭아", "키위", "키위"]
# dictionary 선언
d = {}
for f in fruit:
# f = "사과"
if f in d: # "사과" 라는 key가 d 라는 dictionary에 들어 있어?
d[f] = d[f] + 1 # 그럼 "사과" 갯수를 하나 올려줘.
else : # "사과" 라는 key가 없으면,
d[f] = 1 # 그걸 dictionary에 넣고 value = 1 로 만들어줘.
print(d)
|
update()
- 두 딕셔너리를 병합함
- 겹치는 키가 있다면 parameter로 전달되는 키 값이 overwrite 된다.
a = {'a':1, 'b':2, 'c':3 }
b = {'a':2, 'd':4, 'e':5 }
a.update(b)
print(a) # {'a': 2, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
|
key 삭제
- del 키워드 사용
- pop 함수 이용
c = 100
print(c)
del c
# print(c) # NameError: name 'c' is not defined
a = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5 }
a.pop('b')
del a['d']
print(a) # {'a': 1, 'c': 3, 'e': 5}
# clear() : 딕셔너리의 모든 값을 초기화
a.clear()
print(a) # {}
|
in
- key값 존재 확인
value access
- dict[key]로 접근, 키가 없는 경우 에러 발생
- .get() 함수로 접근, 키가 없는 경우 None 반환
# 빈 Dictionary를 만들고, 이를 변수 my_dict에 넣어보자.
my_dict = {}
my_dict[1] = "Integer"
my_dict['a'] = "String"
my_dict[(1, 2, 3)] = "Tuple"
print(my_dict) # {1: 'Integer', 'a': 'String', (1, 2, 3): 'Tuple'}
# key값 존재 확인
print(1 in my_dict)
print((1, 2, 3) in my_dict)
# value access
# dict[key]로 접근, 키가 없는 경우 에러 발생
# .get() 함수로 접근, 키가 없는 경우 None 반환
print(my_dict.get('a'))
print(my_dict.get((1, 2, 3)))
my_dict['c'] = 3
print(my_dict)
# {1: 'Integer', 'a': 'String', (1, 2, 3): 'Tuple', 'c': 3}
try:
# 여기에 [1, 2, 3] → "List"의 대응관계를 만들어 봅시다.
my_dict[[1, 2, 3]] = "List"
except TypeError:
print("List는 Dictionary의 Key가 될 수 없습니다.")
|
# 다음 대응관계가 담긴 Dictionary를 하나 만들고, 이를 변수 my_dict에 넣어보자.
# “사과” → “apple”
# “바나나” → “banana”
# “당근” → “carrot”
my_dict = {"사과":"apple","바나나":"banana", "당근":"carrot" }
# my_dict에서 “사과”를 Key로 넣어 나온 Value를 변수 var1에 넣어보자
var1 = my_dict["사과"]
print(var1)
# my_dict에서 당근-carrot을 제거해 보자
# del 딕셔너리["키"]
del my_dict["당근"]
print(my_dict) # {'사과': 'apple', '바나나': 'banana'}
# my_dict에서 체리-cherry를 추가해 보자
my_dict["체리"] = "cherry"
print(my_dict) # {'사과': 'apple', '바나나': 'banana', '체리': 'cherry'}
|
모든 keys, values 접근
- keys() : 키만 반환
- values() : 값만 반환
- items() : 키, 값의 튜플을 반환
a = {'a':1, 'b':2, 'c':3}
print(a)
print(a.keys()) # dict_keys(['a', 'b', 'c'])
print(a.values()) # dict_values([1, 2, 3])
print(a.items()) # dict_items([('a', 1), ('b', 2), ('c', 3)])
|
리스트(list)로 변환할 수 있다.
a = {'a':1, 'b':2, 'c':3}
print(a)
print(list(a.keys())) # ['a', 'b', 'c']
print(list(a.values())) # [1, 2, 3]
|
for key, value in miniWord.items():
# Minionese와 한국어가 담긴 miniWord 딕셔너리를 만드세요.
miniWord = {
"Bello":"안녕",
"Poopaye":"잘가",
"Tank_yu":"고마워",
"Tulaliloo_ti_amo":"우린 너를 사랑해"
}
for key, value in miniWord.items():
print(value)
|
'파이썬 > Python 기초' 카테고리의 다른 글
[파이썬 기초] 클래스(class) (0) | 2021.01.01 |
---|---|
[파이썬기초] Tuple(튜플) (0) | 2021.01.01 |
[파이썬 기초] 반복문 for, while (0) | 2020.12.29 |
[파이썬 기초] 함수와 조건문 (0) | 2020.12.29 |
[파이썬기초] List (0) | 2020.08.10 |