Python/Python

[Python] 15. dictionary(딕셔너리)

구름솜:D 2024. 9. 8. 15:58
728x90

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}