[python] 딕셔너리(Dictionary) By starseat 2026-01-11 17:06:17 python Post Tags # 딕셔너리 - ‘연관 배열(associative array)’또는 ‘해시(hash)’라고도 함 - Key와 Value를 한 쌍으로 가지는 자료형 - 리스트나 튜플처럼 순차적으로(sequential) 해당 요솟값을 구하지 않고 Key를 통해 Value를 구함 - 파이썬 3.7부터는 딕셔너리에 아이템을 삽입한 순서가 유지됨. - 즉, 딕셔너리를 순회할 때 아이템이 추가된 순서대로 나옴. ```python # 딕셔너리 생성 예 # {Key1: Value1, Key2: Value2, Key3: Value3, ...} dic = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'} ``` ## 요소 추가 ```python a = {1: 'a'} a[2] = 'b' a # {1: 'a', 2: 'b'} a['name'] = 'pey' a # {1: 'a', 2: 'b', 'name': 'pey'} a[3] = [1, 2, 3] a # {1: 'a', 2: 'b', 'name': 'pey', 3: [1, 2, 3]} ``` ## 요소 삭제 ```python a = {1: 'a', 2: 'b', 'name': 'pey', 3: [1, 2, 3]} del a[1] a # {2: 'b', 'name': 'pey', 3: [1, 2, 3]} ``` ## Key를 사용해 Value 얻기 ```python grade = {'pey': 10, 'julliet': 99} grade['pey'] # 10 # grade['julliet'] 99 ``` ```python a = {1:'a', 2:'b'} a[1] # 'a' a[2] # 'b' ``` ## 딕셔너리 만들 때 주의할 사항 - Key는 고유한 값이므로 중복되는 Key 값을 설정해 놓으면 하나를 제외한 나머지 것들이 모두 무시됨. - 즉, Key 는 1개만 존재 (마지막 Value 만 관리) ```python a = {1:'a', 1:'b'} a # {1: 'b'} ``` - Key 에 리스트는 쓸 수 없지만, 튜플은 가능 - Key가 변하는(mutable) 값인지, 변하지 않는(immutable) 값인지에 따라 설정 여부 결정 ```python a = {[1,2] : 'hi'} # 리스트를 Key 로 세팅할 떄 Traceback (most recent call last): File "", line 1, in TypeError: unhashable type: 'list' ``` ## 딕셔너리 관련 함수 ### Key 리스트 만들기 - keys ```python a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'} a.keys() dict_keys(['name', 'phone', 'birth']) # dict_keys 객체를 리스트로 변환 list(a.keys()) # ['name', 'phone', 'birth'] ``` #### 참고 - 파이썬 2.7 버전까지는 a.keys() 함수를 호출하면 dict_keys가 아닌 리스트를 반환한다. - 리스트를 반환하기 위해서는 메모리 낭비가 발생하는데, 파이썬 3.0 이후 버전에서는 이러한 메모리 낭비를 줄이기 위해 dict_keys 객체를 반환하도록 변경되었다. - dict_values, dict_items 역시 파이썬 3.0 이후 버전에서 추가된 것들이다. - 만약 3.0 이후 버전에서 반환값으로 리스트가 필요한 경우에는 list(a.keys())를 사용하면 된다. - dict_keys, dict_values, dict_items 객체는 리스트로 변환하지 않더라도 기본적인 반복 구문(예: for 문)에서 사용할 수 있다. ### Value 리스트 만들기 - values ```python a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'} a.values() # dict_values(['pey', '010-9999-1234', '1118']) ``` ### Key, Value 쌍 얻기 - items - items 함수는 Key와 Value의 쌍을 튜플로 묶은 값을 dict_items 객체로 반환 - ```python a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'} a.items() # dict_items([('name', 'pey'), ('phone', '010-9999-1234'), ('birth', '1118')]) ``` ### Key: Value 쌍 모두 지우기 - clear ```python a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'} a.clear() a # {} ``` ### Key로 Value 얻기 - get - get(x) 함수는 x라는 Key에 대응되는 Value를 반환 ```python a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'} a.get('name') # 'pey' a.get('phone') # '010-9999-1234' ``` - 없는 값을 가져오려는 경우 - [x]: 오류 발생 - get(x): None 반환 ```python a = {'name':'pey', 'phone':'010-9999-1234', 'birth': '1118'} # 없는 값 get(x) 로 가져오는 경우 a.get('nokey') # None # 없는 값 [x] 로 가져오느 경우 > 오류 발생 a['nokey’] Traceback (most recent call last): File "", line 1, in KeyError: 'nokey' ``` - get(x) 의 default 값 설정 ```python # get(x, '디폴트 값') a.get('nokey', '정보없음') # '정보없음' ``` ### 해당 Key가 딕셔너리 안에 있는지 조사하기 - in ```python a = {'name':'pey', 'phone':'010-9999-1234', 'birth': '1118'} 'name' in a # True 'email' in a # False ``` ### Key로 Value 얻기 - pop ```python a = {'name':'pey', 'phone':'010-9999-1234', 'birth': '1118'} phone = a.pop('phone') phone # '010-9999-1234' a # {'name': 'pey', 'birth': '1118'} ``` - pop(x) 함수는 딕셔너리에서 Key가 x인 항목을 삭제한 후 그 Value를 반환 - get 함수와 달리 pop은 해당 항목을 딕셔너리에서 삭제 - 존재하지 않는 Key에 대해서는 디폴트 값을 지정할 수 있음. ```python email = a.pop('email', '정보없음') email # '정보없음' ``` Previous Post [python] 튜플(Tuple) Next Post [python] 집합(Set)