[Python] 딕셔너리(Dictionary)

딕셔너리(Dictionary)

  • 키(key)값(value)이 쌍을 이루어 저장되는 구조
# 딕셔너리 기본 구조
phone = {
    "민지": "010-1111-1111",
    "현우": "010-2222-2222",
    "서연": "010-3333-3333"
}

딕셔너리의 필요성

  • 모든 키에는 반드시 하나의 값이 연결되어 있음
  • 순서는 중요하지 않음
  • 키는 중복될 수 없고, 한 번 정하면 변경할 수 없음
  • 하나의 키엔 하나의 값만

키와 값의 특징

  • 키(Key)의 특징
    • 중복될 수 없음
    • 같은 이름의 키를 두 번 사용하면, 마지막 값만 저장
    • 변경할 수 없는 데이터만 키가 될 수 있음
      • 즉, 문자열, 숫자, 튜플은 키로 사용 가능
      • 리스트딕셔너리는 키로 사용할 수 없음
  • 값(value)의 특징
    • 어떤 종류의 데이터든 저장 가능
    • 중복 가능
    • 변경 가능

딕셔너리 만들기

  • 중괄호{} 안에 키와 값을 콜론:으로 구분해서 입력하여 생성
  • 여러 개의 키-값 쌍은 쉼표,로 구분

1) 빈 딕셔너리를 만들고 추가하기

  • 처음에는 비어있는 딕셔너리를 만들고, 필요할 때마다 하나씩 데이터를 추가하는 방법
my_dict = {}

my_dict["이름"] = "파이썬"
my_dict["나이"] = 30
my_dict["취미"] = "코딩"

print("내 정보:", my_dict)
# 결과 > 내 정보: {'이름': '파이썬', '나이': 30, '취미': '코딩'}

2) 데이터를 미리 넣어서 만들기

  • 데이터를 알고 있을 때 주로 사용
  • 한 번에 여러 데이터를 입력할 수 있음
fruit_prices = {
    "사과": 1500,
    "바나나": 3000,
    "오렌지": 2000
}

print("과일 가격표:", fruit_prices)
# 결과 > 과일 가격표: {'사과': 1500, '바나나': 3000, '오렌지': 2000}

3) dict()를 통해 다른 자료형을 딕셔너리로 변환하기

  • 이미 리스트나 튜플로 가지고 있는 데이터를 딕셔너리로 변환할 때 사용
# 리스트로 딕셔너리 만들기
pair_list = [['이름', '민지'], ['나이', 20], ['취미', '독서']]
person_info = dict(pair_list)
print("리스트로 만든 딕셔너리:", person_info)

# 튜플로 딕셔너리 만들기
grade_tuples = [('국어', 90), ('수학', 85), ('영어', 88)]
grade_info = dict(grade_tuples)
print("튜플로 만든 딕셔너리:", grade_info)

딕셔너리 데이터 접근하기

1) 대괄호 ‘[]’ 사용하기

  • 대괄호 안에 찾고 싶은 키 입력
  • 존재하지 않는 키를 입력하면 오류 발생 (KeyError)
  • 해당 키가 반드시 있어야 하는 경우 또는 키가 없으면 오류를 발생시키고 싶은 경우 등에 사용

2) get() 메서드 사용하기

  • 대괄호 사용보다 더 안전한 방법
  • 찾는 키가 없어도 오류가 발생하지 않고, 기본값 지정이 가능
  • 해당 키가 있을 수도 있고 없을 수도 있는 경우, 키가 없을 때 기본값을 사용하고 싶은 경우, 안전하게 값을 가져오고 싶은 경우 등에 사용
# 학생의 성적 정보
scores = {
    "민지": 95,
    "현우": 88,
    "서연": 92
}

# get() 메서드로 값 가져오기
print(f"민지의 점수: {scores.get('민지')}")  # 95
print(f"현우의 점수: {scores.get('현우')}")  # 88

print(f"철수의 점수: {scores.get('철수')}")      # None
print(f"영희의 점수: {scores.get('영희', 0)}")   # 0 (기본값 지정)

딕셔너리 활용

딕셔너리 데이터 추가와 수정

딕셔너리이름[새로운키] = 값

  • 여러 데이터를 한 번에 추가하거나 수정하려면 update()를 사용
# 세일 기간 가격 수정하기
fruits = {"사과": 1000, "바나나": 2000}
print("세일 전 가격:", fruits)

# 세일 가격으로 한번에 수정하기
fruits.update({
    "사과": 800,      # 사과 가격 할인
    "바나나": 1500,   # 바나나 가격 할인
    "오렌지": 1000    # 새로운 할인 과일 추가
})
print("세일 가격 적용 후:", fruits)

딕셔너리 데이터 삭제하기

🗑️ del 명령어로 삭제하기

  • 가장 기본적인 삭제 방법
  • 원하는 키의 데이터를 바로 삭제할 수 있음
  • 존재하지 않는 키를 삭제하려고 하면 오류 발생
phone= {
	"준혁": "010-1111-1111", 
	"민지": "010-2222-2222",
	"서현": "010-3333-3333",
	"남자친구": "010-4444-4444"
     }
print("삭제 전:", phone)

del phone["남자친구"]  # 남자친구 번호 삭제
print("삭제 후:", phone)

✂️ pop() 메서드로 삭제하기

  • 데이터를 삭제하면서 동시에 삭제한 값을 가져옴
  • 삭제하려는 키가 없을 때 반환하는 값 지정 가능
# 남자친구 번호를 삭제하면서 동시에 그 값을 변수에 저장
ex_phone_num = phone.pop("남자친구")
print("삭제된 남자친구 번호:", ex_phone_num)
print("현재 연락처:", phone)

# 없는 번호 삭제 시도하기
minsu_phone_num = phone.pop("민수", "없음")  # 민수 번호가 없으면 "없음" 반환
print("삭제된 민수 번호:", minsu_phone_num)

🧹 clear() 메서드로 모두 삭제하기

  • 딕셔너리의 모든 데이터를 일괄 삭제
phone.clear()

딕셔너리 메서드 활용

🔑 keys()

  • 딕셔너리의 모든 키(key)를 가져옴
  • 반복문과 함께 사용하면 모든 키를 하나씩 처리할 수 있음
fruits = {"사과": 1000, "바나나": 2000, "오렌지": 1500}

# 모든 과일 이름(키) 가져오기
fruit_names = fruits.keys()
print("과일 목록:", fruit_names)

# for문으로 하나씩 출력하기
for fruit in fruits.keys():
    print(f"과일 이름: {fruit}")
  • 결과

    과일 목록: dict_keys([‘사과’, ‘바나나’, ‘오렌지’])
    과일 이름: 사과
    과일 이름: 바나나
    과일 이름: 오렌지

💎 values()

  • 딕셔너리의 모든 값(value)을 가져옴
  • 마찬가지로 반복문과 함께 사용하면 모든 값을 하나씩 처리할 수 있음
  • 값들의 합계나 평균 등을 구할 때 유용하게 사용
  • 값들이 숫자일 경우, sum(), max(), min() 등의 함수를 이용하여 쉽게 계산 가능
# 모든 가격(값) 가져오기
prices = fruits.values()
print("가격 목록:", prices)
print("전체 가격 합계:", sum(prices))  # sum() 함수로 합계 구하기
  • 결과

    가격 목록: dict_values([1000, 2000, 1500])
    전체 가격 합계: 4500

🎲 items()

  • 딕셔너리의 키와 값을 쌍으로 모두 가져옴
  • 반복문으로 접근 가능
# 과일과 가격을 함께 출력하기
for name, price in fruits.items():
    print(f"{name}의 가격: {price}원")
  • 결과

    사과의 가격: 1000원
    바나나의 가격: 2000원
    오렌지의 가격: 1500원

출처
데이스쿨 - 나도 할 수 있다! 파이썬: 하

Leave a comment