딕셔너리

2025. 7. 8. 16:26Programming Language/Python

반응형

파이썬에서 딕셔너리(Dictionary)는 키(key)와 값(value) 쌍을 저장하는 자료형으로 자바의 Map, C++의 std::map, JS의 Object와 비슷하게 사용된다 .

 

딕셔너리의 생성 및 사용

딕셔너리를 생성할때는 중괄호를 사용하고 내부에 값을 key:value 쌍으로 저장한다.

person = {'name': '홍길동', 'age': 25, 'job': 'developer'}
empty_dict = {}

 

키와 값을 추가하거나 값을 수정하는 방법은 아래와 같이 추가하는 키 값으로 값을 초기화하거나 기존 키에 값을 넣으면 된다.

person['city'] = 'Seoul'           # 추가
person['age'] = 26                 # 수정

 

값에 접근하는 방법은 아래와 같이 딕셔너리명에 대괄호를 사용해서 내부에 키값을 넣어주면 된다.

print(person['name'])              # '홍길동'

그런데 이렇게 사용하면 해당 키가 존재하지 않을 경우 에러를 발생시킨다.

print(person['gender'])              # exception 발생

그럴때 .get 메서드를 사용하면 존재하지 않는 키일 경우 none을 반환한다.

print(person.get('job'))           # 'developer'
print(person.get('gender'))        # None (에러 발생 x)

그리고 get메서드에 두번째 인자로 값을 넣어주면 첫번째 인자로 구성된 키로 값이 존재하지 않을 경우 None을 반환하는게 아니라 두번째 인자를 반환한다.

print(person.get('gender', 'male'))        # 'male'

 

값을 삭제할때는 두가지방식을 사용할 수 있는데 먼저 del 키워드이다.

del 키워드와 함께 딕셔너리명과 대괄호로 키값을 넣어 전달하면 해당 키와 요소를 제거한다.

del person["name"]
print(person)           # {'age': 25, 'job': 'developer'}

 

그리고 리스트와 마찬가지로 pop메서드를 사용해서 값을 제거할 수 도 있다

pop메서드의 경우 리스트는 인덱스를 전달해줘야 했으나 이번에는 key값을 제거하면 해당 키와 값을 삭제하고 그 값을 반환한다.

print(person.pop("name"))  # '홍길동'
print(person)              # {'age': 25, 'job': 'developer'}

 

 

딕셔너리의 주요 메서드

1. key(): 딕셔너리의 키 목록을 반환한다.

print(person.keys())   # dict_keys(['name', 'job'])

반환값의 형태는 딕셔너리의 키만 모아놓은 뷰(view)객체로 dick_key 객체가 반환되며 이 반환값으로 리스트 처럼 인덱싱 및 슬라이싱을 바로 사용할 수는 없고 

print(person.keys()[1])    # 인덱싱 바로 사용불가
print(person.keys()[0:1])  # 슬라이싱 바로 사용불가

 

for문의 순회는 가능하기에 이걸 사용해서 값을 활용하면 된다

keys = person.keys()

keySet = []      
for key in keys:         # dict_key의 요소를 하나씩 뽑아다 
    keySet.append(key)   # keySet이라는 리스트에 저장

print(keySet)            # ['age', 'job']

 

바로 리스트로 만들고 싶다면 dict_key 객체를 list() 함수로 감싸면 리스트 객체로 전환된다.

keySet = list(person.keys())
print(keySet)                  #['age', 'job']

 

2. in 연산자의 사용

딕셔너리 내부에 특정 키가 존재하는지 확인할때 in 연산자를 활용할 수 있다.

person = {'name': '홍길동', 'age': 25, 'job': 'developer'}

if 'name' in person.keys():
    print("name이라는 키가 존재함")

 

그런데 사실 .key키워드를 사용하지 않고 아래와 같이 사용해도 키의 존재여부를 확인할 수 있다.

person = {'name': '홍길동', 'age': 25, 'job': 'developer'}

if 'name' in person:
    print("name이라는 키가 존재함")

 

 

3. set 연산이 가능한 dict_key 객체

dict_key 객체는 set(집합) 연산(&, | )이 가능하다.

a = {'x': 1, 'y': 2}
b = {'y': 3, 'z': 4}

common_keys = a.keys() & b.keys()  # 교집합
print(common_keys)                 # {'y'}

all_keys = a.keys() | b.keys()     # 합집합
print(all_keys)                    # {'x', 'y', 'z'}

 

4. sorted(dict_key): 키값을 정렬해서 리스트로 반환한다.

person = {'name': '홍길동', 'age': 25, 'job': 'developer'}
key_list = sorted(person.keys())
print(key_list)                  # ['age', 'job', 'name']

 

5. values() : 값을 출력한다.

출력시엔 dict_values객체로 dict_keys와 비슷한 기능을 한다.

person = {'name': '홍길동', 'age': 25, 'job': 'developer'}

print(person.values())  # dict_values(['홍길동', 25, 'developer'])

 

6. items(): 키, 값 쌍으로 출력한다

출력시엔 dict_items 객체로 dict_keys와 dict_values와는 다르게 내부에 튜플의 형태로 구성된 객체로 반환된다.

print(person.items())          # dict_items([('name', '홍길동'), ('age', 25), ('job', 'developer')])
print(list(person.items()))    # [('name', '홍길동'), ('age', 25), ('job', 'developer')]

list() 메서드로 감쌌을때 튜플을 담은 리스트의 형태가 된다.

 

반응형

'Programming Language > Python' 카테고리의 다른 글

튜플  (0) 2025.07.08
리스트  (0) 2025.07.08
Windows에서 pyenv 사용하기  (2) 2024.11.28
설치 및 IDLE , IDE 사용  (1) 2023.12.02