[Python] 15. dictionary(딕셔너리)
dictionary (딕셔너리)
- 여러가지 자료를 키(key)-값(value) 형태로 저장할 수 있는 자료형
- 키(key)를 기반으로 값을 저장
- 키(key) : 딕셔너리 내부에서 값(value)에 접근할 때 사용하는 것 (리스트의 인덱스와 비슷)
- 값(value) : 딕셔너리 내부에 있는 각각의 자료(data)
- 키(key)에는 숫자, 문자열, bool 자료형으로 선언 가능
- 값(value)에는 숫자, 문자열, bool, 리스트, 딕셔너리 모두 가능
dictionary 선언/추가/삭제하기
1. 딕셔너리 선언하기
- { }(중괄호) 내부에 ' 키(key) : 값(value)' 형태로 여러종류의 자료를 넣어 선언한다.
dict_ex = {1: 'a', 2: 'b'}
2. 딕셔너리 요소 추가하기
- 딕셔너리[key] = value
dict_ex = {1: 'a', 2: 'b'}
dict_ex[3] = 'c' #{1: 'a', 2: 'b', 3: 'c'}
dict_ex['4번째'] = 'd' #{1: 'a', 2: 'b', 3: 'c', '4번째': 'd'}
3. 딕셔너리 요소 삭제하기
- del 딕셔너리[key]
dict_ex = {1: 'a', 2: 'b'}
dict_ex[3] = 'c' #{1: 'a', 2: 'b', 3: 'c'}
dict_ex['4번째'] = 'd' #{1: 'a', 2: 'b', 3: 'c', '4번째': 'd'}
del dict_ex['4번째'] #{1: 'a', 2: 'b', 3: 'c'}
딕셔너리의 key
- 딕셔너리에서 키(key)는 딕셔너리 내부의 값(value)에 접근할 때 사용하는 것으로 리스트의 인덱스와 비슷하다.
dict_ex = {'name':'홍길동', 'phone':'010-1234-5678', 'birth': '2000-01-01'}
dict_ex['name'] #홍길동
dict_ex['phone'] #010-1234-5678
*** 딕셔너리에서 key는 고유한 값이기 때문에 중복으로 사용하면 안된다.
*** 만약, 딕셔너리 key를 중복으로 사용했을 경우, 마지막으로 사용한 key를 제외한 나머지는 무시된다.
dict_ex = {'name':'신데렐라', 'name':'백설공주'}
dict_ex['name'] #백설공주
딕셔너리 관련 메소드
딕셔너리.keys : 딕셔너리의 key값을 리스트로 반환
딕셔너리.values : 딕셔너리의 values를 리스트로 반환
딕셔너리.items : 딕셔너리의 key와 value를 한 쌍으로 하여 리스트로 반환
딕셔너리.clear : 딕셔너리의 모든 요소 삭제
딕셔너리.get(x) : x에 key를 대입하여 그에 대응하는 value값을 반환
'key' in 딕셔너리 : 딕셔너리안에 해당 key가 있는지 확인
dict_ex = {'name':'홍길동', 'phone':'010-1234-5678', 'birth': '2000-01-01'}
dict_ex.keys()
#dict_keys(['name', 'phone', 'birth'])
dict_ex.values()
#dict_values(['홍길동', '010-1234-5678', '2000-01-01'])
dict_ex.items()
#dict_items([('name', '홍길동'), ('phone', '010-1234-5678'), ('birth', '2000-01-01')])
dict_ex.get('phone')
#010-1234-5678
'phone' in dict_ex
#True
dict_ex.clear()
#{}
*** keys(),values(),items()는 리스트로 반환하여 리스트처럼 인덱스 형태로 사용 가능하다.
그러나 리스트 고유의 append, insert, pop, remove, sort 메소드는 사용할 수 없다.
*** get()메소드는 딕셔너리[key]와 동일한 결과값을 리턴한다.
그러나 딕셔너리에 존재하지 않는 키를 가져올 경우, 딕셔너리[key]는 오류를 발생시키고, get()메소드는 None를 리턴한다.
딕셔너리 자료 input()
for문을 사용해서 key와 values 입력가능
dict_ex = {}
for i in range(3):
x = input()
y = input()
dict_ex[x] = y
print(dict_ex)
#입력
name
홍길동
phone
010-1234-5678
birth
2000-01-01
#출력
{'name': '홍길동', 'phone': '010-1234-5678', 'birth': '2000-01-01'}
dict.fromkeys메소드
- 딕셔너리를 생성하는 메소드
- 딕셔너리의 여러개의 key에 value값이 동일할 때 주로 사용
- dict.fromkeys(key,value)로 사용
key) 생성하려는 딕셔너리의 key 목록
value) 생성하려는 딕셔너리의 value
***key 목록에 중복이 있을 시, 중복을 허용하지 않는 특성에 의해 하나를 제외한 나머지는 무시된다.
#key에 중복이 없는 경우
nonduplicate = ['name', 'age', 'sex']
dict_ex1 = dict.fromkeys(nonduplicate)
print(dict_ex1) #{'name': None, 'age': None, 'sex': None}
dict_ex2 = dict.fromkeys(nonduplicate, 10)
print(dict_ex2) #{'name': 10, 'age': 10, 'sex': 10}
#key에 중복이 있는 경우
duplicate = ['name', 'age', 'sex','name']
dict_ex3 = dict.fromkeys(duplicate)
print(dict_ex3) #{'name': None, 'age': None, 'sex': None}
dict_ex4 = dict.fromkeys(duplicate, 10)
print(dict_ex4) #{'name': 10, 'age': 10, 'sex': 10}