Python 자료형-딕셔너리

배추·2025년 11월 9일

🐍 Python

목록 보기
4/19

Python의 딕셔너리 자료형에 대해 알아봅니다.


▶︎딕셔너리

  • Key와 Value를 한 쌍으로 가지는 자료형.
  • ‘연관 배열(associative array)’또는 ‘해시(hash)’라고도 한다.
  • 리스트나 튜플처럼 순차적으로(sequential) 해당 요솟값을 구하지 않고 Key를 통해 Value를 얻는다.
    • 내용을 순차적으로 모두 검색하지 않는다.
  • 파이썬 3.7 이전 버전에서는 딕셔너리에 데이터를 저장할 때 입력한 순서가 보장되지 않았다. 하지만 파이썬 3.7부터는 딕셔너리에 아이템을 삽입한 순서가 유지된다. 즉, 딕셔너리를 순회할 때 아이템이 추가된 순서대로 나온다.

🌟딕셔너리 생성

  • 딕셔너리의 기본 모습: {Key1: Value1, Key2: Value2, Key3: Value3, ...}
    • Key와 Value의 쌍 여러 개가 {}로 둘러싸여 있다.
    • 각각의 요소는 Key: Value 형태로 이루어져 있고 쉼표(,)로 구분되어 있다.
dic = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'}

🌟딕셔너리 쌍 추가

a = {1: 'a'}
a[2] = 'b'
a # {1: 'a', 2: 'b'}
a['name'] = 'pey'
a # {1: 'a', 2: 'b', 'name': 'pey'}

🌟딕셔너리 요소 삭제

a = {1: 'a', 2: 'b', 'name': 'pey'}
del a[1]
a # {2: 'b', 'name': 'pey'}
del a['name']
a # {2: 'b'}

🌟딕셔너리에서 Key를 사용해 Value 얻기

  • 리스트나 튜플, 문자열은 요솟값을 얻고자 할 때 인덱싱이나 슬라이싱 기법 중 하나를 사용하지만 딕셔너리는 Key를 사용해서 Value를 구한다.
  • 어떤 Key의 Value를 얻기 위해서는 '딕셔너리변수이름[Key]'를 사용해야 한다.
grade = {'pey': 10, 'julliet': 99}
grade['pey'] # 10
grade['julliet'] # 99
  • 딕셔너리에서 Key는 고유한 값이므로 중복되는 Key 값을 설정해 놓으면 하나를 제외한 나머지 것들이 모두 무시된다. (딕셔너리에는 동일한 Key가 중복으로 존재할 수 없다.)
a = {1:'a', 1:'b'}
a # {1: 'b'}
a[1] # 'b'
  • 딕셔너리의 Key로 쓸 수 있는 것은 변하지 않는(immutable) 값만 가능.
    • Key에 리스트는 쓸 수 없다. 리스트는 그 값이 변할 수 있기 때문.
    • 하지만 튜플은 Key로 쓸 수 있다.
    • Value에는 변하는 값이든, 변하지 않는 값이든 아무 값이나 넣을 수 있다.
a = {[1,2] : 'hi'}
# TypeError: unhashable type: 'list'

🌟딕셔너리 관련 함수

📍keys

  • Key 리스트 만들기.
a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'}
a.keys() # dict_keys(['name', 'phone', 'birth'])
  • a.keys()는 딕셔너리 a의 Key만을 모아 dict_keys 객체를 반환.

📍values

  • Value 리스트 만들기.
a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'}
a.values() # dict_values(['pey', '010-9999-1234', '1118'])
  • a.keys()는 딕셔너리 a의 value만을 모아 dict_values 객체를 반환.

📍items

  • Key, Value 쌍 얻기.
a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'}
a.items() # dict_items([('name', 'pey'), ('phone', '010-9999-1234'), ('birth', '1118')])
  • items 함수는 Key와 Value의 쌍을 튜플로 묶은 값을 dict_items 객체로 반환

+) 파이썬 3.0 이후에는 dict 객체

  • 파이썬 2.7 버전까지는 a.keys() 함수를 호출하면 dict_keys가 아닌 리스트를 반환한다.
  • 리스트를 반환하기 위해서는 메모리 낭비가 발생하는데, 파이썬 3.0 이후 버전에서는 이러한 메모리 낭비를 줄이기 위해 dict_keys, dict_values, dict_items 객체를 반환하도록 변경되었다.

+) dict 객체

  • dict_keys, dict_values, dict_items 객체는 리스트로 변환하지 않더라도 기본적인 반복 구문(예: for 문)에서 사용할 수 있다.
    for k in a.keys():
        print(k)
    # name
    # phone
    # birth
  • 리스트를 사용하는 것과 별 차이는 없지만, 리스트 고유의 append, insert, pop, remove, sort 함수는 수행할 수 없다.
  • 반환값으로 리스트가 필요한 경우에는 list(a.keys())를 사용하면 된다.
    list(a.keys()) # ['name', 'phone', 'birth']

📍clear

  • Key: Value 쌍 모두 지우기.
a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'}
a.clear() 
a # {}
  • clear 함수는 딕셔너리 안의 모든 요소를 삭제.
  • 빈 딕셔너리는 {}로 표현한다.

📍get

  • Key로 Value 얻기.
a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'}
a.get('name') # 'pey'
a.get('phone') #'010-9999-1234'
a.get('nokey', '정보없음') # '정보없음'
  • get(x) 함수는 x라는 Key에 대응되는 Value를 반환.
  • a['nokey']: 딕셔너리에 존재하지 않는 키로 값을 가져오려고 할 경우, 오류를 발생.
  • a.get('nokey'): 딕셔너리에 존재하지 않는 키로 값을 가져오려고 할 경우, None을 반환.
  • 딕셔너리 안에 찾으려는 Key가 없을 경우, 미리 정해 둔 디폴트 값을 대신 가져오게 하고 싶을 때는 get(x, '디폴트 값')을 사용.

📍in

  • 해당 Key가 딕셔너리 안에 있는지 조사.
a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'}
'name' in a # True
'email' in a # False
  • 'name' 문자열은 a 딕셔너리의 Key 중 하나이다. 따라서 'name' in a를 호출하면 참(True)을 반환.
  • 'email'은 a 딕셔너리 안에 존재하지 않는 Key이므로 거짓(False)을 반환.

📍pop

  • Key로 Value 얻기.
a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'}
phone = a.pop('phone')
phone # '010-9999-1234'
a # {'name': 'pey', 'birth': '1118'}

email = a.pop('email', '정보없음')
email # '정보없음'
  • pop(x) 함수는 딕셔너리에서 Key가 x인 항목을 삭제한 후 그 Value를 반환.
  • get 함수와 달리 pop은 해당 항목을 딕셔너리에서 삭제한다는 차이가 있다.
  • 존재하지 않는 Key에 대해서는 디폴트 값을 지정할 수 있다.
profile
난 🥬

0개의 댓글