SK Networks AI/일일 회고록

[SK네트웍스 Family AI 캠프 11기] 일일 회고 - 3일차(25.02.11 화요일)

js-kkk 2025. 2. 10. 17:33

파이썬 문법 중 dictionary와 제어문을 위주로 강의가 진행되었다. 정확히 알고 있는 내용은 생략하고, 조금이라도 헷갈리거나 새로 알게된 부분만 기록하려고 한다.

 

 

 

학습 내용

1. 자료형 - dictionary

2. 조건문 match

 

 

1. 자료형 - dictionary

 

딕셔너리란?

키(key)와 값(value)의 쌍으로 구성된 자료형(데이터 구조)로, 키를 통해 값을 찾을 수 있으므로 매우 빠른 조회 성능을 보여준다. 연관 배열(associative array) 또는 해시(hash)라고도 한다.

 

 

딕셔너리의 특징

  1. 키(key)와 값(value)의 쌍으로 구성된다.

사전에서 단어를 찾아 뜻을 확인하는 것처럼, Dictionaries에서 키를 사용하여 해당 값을 손쉽게 찾고 활용할 수 있다.

ohgiraffers = {
    'tiger' : 'langChain', 
    'Squirrel' :'JPA', 
    'Bear':'Python', 
    'Gorilla':'Spring'
}
print(ohgiraffers)    # {'tiger': 'langChain', 'Squirrel': 'JPA', 'Bear': 'Python', 'Gorilla': 'Spring'}

print(ohgiraffers['tiger'])       # langChain
print(ohgiraffers['Squirrel'])    # JPA

 

    2. 키는 고유해야 하며 불변(immutable)한 데이터 타입이어야 한다.

각 키는 유일하게 존재해야 하므로, 동일한 키로 여러 값을 저장할 수 없다.

  • 만약 중복 키로 값을 입력하면, 기존 값을 덮어쓴다.
  • 이러한 특징은 데이터 검색 및 관리의 효율성을 높여준다.

key로 가변 자료형(리스트, 딕셔너리)는 사용할 수 없고, 기본 자료형이나 불변 자료형(튜플)은 사용할 수 있다

ohgiraffers = {
    'tiger':'langChain', 
    'Squirrel':'JPA', 
    'Bear':'Python', 
    'Gorilla':'Spring', 
    "Squirrel":"MyBatis"
}
print(ohgiraffers['Squirrel'])    # MyBatis

# invalid_key_teacher = {["name", "team"] : 'bear.ohgiraffer'}  # Error 발생

valid_key_dic = {("name", "team") : 'bear.ohgriaffers'}
print(valid_key_dic[("name", "team")])    # bear.ohgriaffers

 

    3. Dictionaries는 가변적인 자료구조이다.

  • 딕셔너리는 가변적인 자료구조로, Dictionaries 생성 후에도 키-값 쌍을 추가/삭제/수정할 수 있다.
  • 이는 상황에 따라 데이터를 동적으로 변경해야 하는 경우 유용하게 활용될 수 있다.
ohgiraffers = {
    'tiger' : 'langChain', 
    'Squirrel' :'JPA', 
    'Bear':'Python', 
    'Gorilla':'Spring'
}
print(ohgiraffers['tiger'])    # langChain

ohgiraffers['tiger'] = 'java'
print(ohgiraffers['tiger'])    # java

 

    4. 빠른 조회와 수정이 가능하다.

딕셔너리는 해시 테이블을 사용하여 구현되므로, 평균적으로 O(1)의 시간 복잡도로 항목을 조회하고 수정할 수 있다.

 

    5. del 키워드를 이용해 딕셔너리를 삭제할 수 있다.

del ohgiraffers
# print(ohgiraffers)  # Error 발생

 

    6. in 키워드를 사용하여 key 값의 존재 여부를 확인할 수 있다.

ohgiraffers = {
    'tiger' : 'langChain', 
    'Squirrel' :'JPA', 
    'Bear':'Python', 
    'Gorilla':'Spring'
}
print('tiger' in ohgiraffers)    # True

 

 

추가 설명 (딕셔너리의 함수 저장)

 

2. 조건문 match

match-case

주어진 값을 case 블록의 값과 비교해 일치하는 case만 실행한다.

  • 즉, match 키워드 뒤에 붙은 변수의 값이나 값 자체가 case 키워드 뒤의 값과 같을 경우, 해당 블럭의 실행문을 수행한다.
  • 마지막에 case _ 블록의 실행문3은 위의 모든 케이스에 해당하지 않는 경우 수행하는 내용이 된다.
match 변수 or 값 :
    case 값1:
        실행문1
    case 값2:
        실행문2
        .
        .
        .
    case _:
        # 다른 조건들을 모두 제외한 값을 의미함
        실행문3

⇒ 조건을 따지고자 하는 경우가 많을 때, if-elif-else 보다 가독성이 높고 간결하게 작성할 수 있다.

 

  • 예시
print("=== OhGiraffers vending machine ===")
print("tiger: 우리는 1인 24시간 교대제로 간다")
print("monkey: 24시간 문의 환영, 다른 말로 하면?")
print("squirrel: 저도 하루에 너다섯 시간 자는데요?")
print("rabbit: 살아남는 사람이 강한 사람입니다.")
print("====================================")
print("만나고 싶은 선생님을 입력해 주세요")
input_teacher = input()
print("====================================")

sleep_time = 0
match input_teacher:
    case "tiger":
        print("호랑이 선생님의 메타버스에 오신 것을 환영합니다.")
        sleep_time = 3
    case "monkey":
        print("원숭이 선생님의 밀림에 오신 것을 환영합니다.")
        sleep_time = 3.5
    case "squirrel":
        print("다람쥐 선생님의 매력의 늪에 오신 것을 환영합니다.")
        sleep_time = 5
    case "rabbit" :  
        print("토끼 선생님의 다정보스 랩에 오신 것을 환영합니다.")
        sleep_time = 5.2
    case _:
        print("공부할 마음이 없으신 건 아니죠?")

print("매일 " + str(sleep_time) + "시간의 수면이 예상됩니다.")
# print("매일", sleep_time, "시간의 수면이 예상됩니다.")