[zero-base/] DS Part 3. 자료구조 - 15일차 스터디 노트

손윤재·2023년 12월 23일

제로베이스 DS 22기

목록 보기
16/55
post-thumbnail

딕셔너리란?

키(Key)와 값(Value)으로 이루어진 쌍을 저장해 자료를 관리하는 자료 구조이다.

  • 딕셔너리는 유연하고 강력한 자료구조로, 데이터를 효율적으로 관리하고 사용할 수 있도록 도와준다.

  • 딕셔너리는 다양한 데이터 유형을 값으로 가질 수 있다.

  • 키는 변경불가능(immutable)한 데이터 유형이어야 한다.

    • 문자열, 숫자, 튜플 등은 키로 사용 가능하다.
    • ❌ 리스트와 같이 변경 가능한(mutable) 데이터 유형은 키로 사용할 수 없다.
  • Value(값)은 Key가 다르면 얼마든지 중복 가능하다.

  • 중괄호{}를 사용하여 정의되며, 각 키-값 쌍은 콜론:으로 구분하고 요소는 콤마,로 구분한다.

    students = {'s1':'홍길동', 's2':'박찬호', 's3':'이용규', 's4':'박승철', 's5':'김지은'}
    
     memInfo = {'이름':'홍길동', '메일':'gildong@gmail.com', '학년':3, '취미':['농구', '게임']}

< 조회 >


조회는 기본적으로 for문을 이용해 각 요소에 접근한다.
딕셔너리의 메서드와 함께 사용해 Key와 Value를 조회할 수 있다.

✅ dict_object[]

dict_object[Key] → Value 조회

  • 딕셔너리는 키를 이용해 값을 조회할 수 있다.

  • 존재하지 않는 키를 사용해 값을 조회하면 Error가 발생한다.

  students = {'s1':'홍길동', 's2':'박찬호', 's3':'이용규', 's4':'박승철', 's5':'김지은'}

  print('students[\'s1\']:{}'.format(students['s1']))  
  print('students[\'s2\']:{}'.format(students['s2']))  
  print('students[\'s3\']:{}'.format(students['s3']))  
  print('students[\'s4\']:{}'.format(students['s4']))  
  print('students[\'s5\']:{}'.format(students['s5']))  
  # students['s1']:홍길동
  # students['s2']:박찬호
  # students['s3']:이용규
  # students['s4']:박승철
  # students['s5']:김지은  


  memInfo = {'이름':'홍길동', '취미':['농구', '게임', '여행']}

  print('memInfo[\'이름\']:{}'.format(memInfo['이름']))
  print('memInfo[\'취미\']:{}'.format(memInfo['취미']))
  print('memInfo[\'취미[0]\']:{}'.format(memInfo['취미'][0]))
  print('memInfo[\'취미[1]\']:{}'.format(memInfo['취미'][1]))
  print('memInfo[\'취미[2]\']:{}'.format(memInfo['취미'][2]))
  # memInfo['이름']:홍길동
  # memInfo['취미']:['농구', '게임', '여행']
  # memInfo['취미[0]']:농구
  # memInfo['취미[1]']:게임
  # memInfo['취미[2]']:여행

✅ get()

dict_object.get[__key] → Value 조회

  • get() method로 값을 조회할 수 있다.

  • 조회하려는 Dictionary 내에 Key 값이 없어도 에러가 발생하지 않는다. Key 값이 없으면 Default 값인 None을 반환한다.

  students = {'s1':'홍길동', 's2':'박찬호', 's3':'이용규', 's4':'박승철', 's5':'김지은'}

  print('students.get(\'s5\'): {}'.format(students.get('s5')))
  print('students.get(\'s6\'): {}'.format(students.get('s6')))
  #	students.get('s5'): 김지은
  #	students.get('s6'): None

✅ keys()

dict_object.keys() → 전체 Key 조회

  • keys() method는 전체 Key 데이터를 리스트와 비슷한 자료 구조로 리턴해 준다.

    • 전체 키 데이터를 리스트로 변환해서 사용할 수 있다.
    memInfo = {'이름':'홍길동'
    		  , '메일':'gildong@gmail.com'
              , '학년':3
              , '취미':['농구', '게임']}
    
    ks = memInfo.keys()
    
    print(f'keys : {ks}')
    print(f'keys type : {type(ks)}')
    # keys : dict_keys(['이름', '메일', '학년', '취미'])
    # keys type : <class 'dict_keys'>
    # ➡ 리스트와 비슷하지만 완전한 리스트는 아닌 자료형이다.
     
    ks = list(ks)
    print(f'keys : {ks}')
    print(f'keys type : {type(ks)}')
    # keys : ['이름', '메일', '학년', '취미']
    # keys type : <class 'list'>

    print(f'keys[0] : {ks[0]}')  #	keys[0] : 이름
    print(f'keys[1] : {ks[1]}')  #	keys[1] : 메일
    print(f'keys[2] : {ks[2]}')  #	keys[2] : 학년
    print(f'keys[3] : {ks[3]}')  #	keys[3] : 취미
  • for문을 이용해 각 요소에 접근한다.

    for key in memInfo.keys():
        print(f'key: {key}')
     # key: 이름
     # key: 메일
     # key: 학년
     # key: 취미
    
    for idx, key in enumerate(memInfo.keys()):
        print(f'idx, key: {idx}, {key}')
     # idx, key: 0, 이름
     # idx, key: 1, 메일
     # idx, key: 2, 학년
     # idx, key: 3, 취미

✅ values()

dict_object.values() → 전체 Value 조회

  • values() method는 전체 Value 데이터를 리스트와 비슷한 자료 구조로 리턴해 준다.

    • 전체 값 데이터를 리스트로 변환해서 사용할 수 있다.
   memInfo = {'이름':'홍길동'
  			 , '메일':'gildong@gmail.com'
             , '학년':3
             , '취미':['농구', '게임']}

   vs = memInfo.values()

   print(f'values : {vs}')
   print(f'values type : {type(vs)}')
   # values : dict_values(['홍길동', 'gildong@gmail.com', 3, ['농구', '게임']])
   # values type : <class 'dict_values'>
  
   vs = list(vs)
   print(f'values : {vs}')
   print(f'values type : {type(vs)}')
   # values : ['홍길동', 'gildong@gmail.com', 3, ['농구', '게임']]
   # values type : <class 'list'>

   print(f'values[0] : {vs[0]}')  # values[0] : 홍길동
   print(f'values[1] : {vs[1]}')  # values[1] : gildong@gmail.com
   print(f'values[2] : {vs[2]}')  # values[2] : 3
   print(f'values[3] : {vs[3]}')  # values[3] : ['농구', '게임']
  • for문으로 각 요소에 접근한다.

    for value in memInfo.values():
         print(f'value: {value}')
     # value: 홍길동
     # value: gildong@gmail.com
     # value: 3
     # value: ['농구', '게임']
    
     for idx, value in enumerate(memInfo.values()):
         print(f'idx, value: {idx}, {value}')
     # idx, value: 0, 홍길동
     # idx, value: 1, gildong@gmail.com
     # idx, value: 2, 3
     # idx, value: 3, ['농구', '게임']

✅ items()

dict_object.items() → 전체 Key와 Value 조회

  • items() method는 전체 (Key, Value) 쌍을 리스트와 비슷한 자료 구조로 리턴해 준다.

    • 전체 (키, 값)쌍 데이터를 리스트로 변환해서 사용할 수 있다.
   memInfo = {'이름':'홍길동'
   			 , '메일':'gildong@gmail.com'
             , '학년':3
             , '취미':['농구', '게임']}
    
   items = memInfo.items()
    
   print(f'items : {items}')
   print(f'items type : {type(items)}')
   # items : dict_items([('이름', '홍길동'), ('메일', 'gildong@gmail.com')
   #					 , ('학년', 3), ('취미', ['농구', '게임'])])
   # items type : <class 'dict_items'>
    
   items = list(items)
   print(f'items : {items}')
   print(f'items type : {type(items)}')
   # items : [('이름', '홍길동'), ('메일', 'gildong@gmail.com')
   #		 , ('학년', 3), ('취미', ['농구', '게임'])]
   # items type : <class 'list'>

   print(f'items[0] : {items[0]}')  
   print(f'items[1] : {items[1]}')  
   print(f'items[2] : {items[2]}')  
   print(f'items[3] : {items[3]}')  
   # items[0] : ('이름', '홍길동')
   # items[1] : ('메일', 'gildong@gmail.com')
   # items[2] : ('학년', 3)
   # items[3] : ('취미', ['농구', '게임'])
  • for문으로 각 요소에 접근한다.

    for item in memInfo.items():
         print(f'item: {item}')
     # item: ('이름', '홍길동')
     # item: ('메일', 'gildong@gmail.com')
     # item: ('학년', 3)
     # item: ('취미', ['농구', '게임'])
    
     for idx, item in enumerate(memInfo.items()):
         print(f'idx, item: {idx}, {item}')
     # idx, item: 0, ('이름', '홍길동')
     # idx, item: 1, ('메일', 'gildong@gmail.com')
     # idx, item: 2, ('학년', 3)
     # idx, item: 3, ('취미', ['농구', '게임'])



< 추가 >


dict_object[new_Key] = Value 형태로 item 추가

  myInfo = {}

  myInfo['이름'] = '박경진'
  myInfo['전공'] = 'computer'
  myInfo['메일'] = 'jin@naver.com'
  myInfo['학년'] = 3
  myInfo['주소'] = '대한민국 서울'
  myInfo['취미'] = ['요리', '여행']

  print(f'myInfo : {myInfo}')
  #	myInfo : {'이름': '박경진', '전공': 'computer'
  #			 , '메일': 'jin@naver.com', '학년': 3
  #			 , '주소': '대한민국 서울', '취미': ['요리', '여행']}



< 수정 >


dict_object[__key] = Value 형태로 value를 수정

  myInfo = {}

  myInfo['이름'] = '박경진'
  myInfo['전공'] = 'computer'
  myInfo['메일'] = 'jin@naver.com'
  myInfo['학년'] = 3
  myInfo['주소'] = '대한민국 서울'
  myInfo['취미'] = ['요리', '여행']

  print(f'myInfo : {myInfo}')
  #	myInfo : {'이름': '박경진', '전공': 'computer'
  #			 , '메일': 'jin@naver.com', '학년': 3
  #			 , '주소': '대한민국 서울', '취미': ['요리', '여행']}

  ❕ 값 수정
  myInfo['전공'] = 'sports'
  myInfo['학년'] = '4'
  print(f'myInfo : {myInfo}')
  # myInfo : {'이름': '박경진', '전공': 'sports'
  #			 , '메일': 'jin@naver.com', '학년': '4'
  #			 , '주소': '대한민국 서울', '취미': ['요리', '여행']}



< 삭제 >


✅ del

del dict_object[__key] → Item(__key:value) 삭제

  memInfo = { '이름':'홍길동'
            , '메일':'gildong@gmail.com'
            , '학년':3
            , '취미':['농구', '게임']}

  del memInfo['메일']
  print(f'memInfo: {memInfo}')
  # memInfo: {'이름': '홍길동', '학년': 3, '취미': ['농구', '게임']}

  del memInfo['취미']
  print(f'memInfo: {memInfo}')
  # memInfo: {'이름': '홍길동', '학년': 3}

✅ pop()

dict_object.pop(__key) → Item(__key:value) 삭제

  • pop() 메서드는 요소를 삭제하면서 해당 키의 값을 반환한다.
    memInfo = { '이름':'홍길동'
              , '메일':'gildong@gmail.com'
              , '학년':3
              , '취미':['농구', '게임']}

    returnValue = memInfo.pop('이름')
    print(f'memInfo: {memInfo}')
    print(f'returnValue: {returnValue}')
    print(f'returnValue type: {type(returnValue)}')
    # memInfo: {'메일': 'gildong@gmail.com', '학년': 3, '취미': ['농구', '게임']}
    # returnValue: 홍길동
    # returnValue type: <class 'str'>

    returnValue = memInfo.pop('취미')
    print(f'memInfo: {memInfo}')
    print(f'returnValue: {returnValue}')
    print(f'returnValue type: {type(returnValue)}')
    # memInfo: {'메일': 'gildong@gmail.com', '학년': 3}
    # returnValue: ['농구', '게임']
    # returnValue type: <class 'list'>

✅ clear()

dict_object.clear() → 모든 Item(전체) 삭제

  memInfo = { '이름':'홍길동'
            , '메일':'gildong@gmail.com'
            , '학년':3
            , '취미':['농구', '게임']}

  memInfo.clear()
  print('memInfo: {}'.format(memInfo))
  #	memInfo: {}
profile
ISTP(정신승리), To Be Data Scientist

0개의 댓글