본문 바로가기
Python/알고리즘 기초

파이썬(Python) - 딕셔너리(dictionary) 원소 검색/추가/삭제

by Sunyoung95 2022. 3. 29.
딕셔너리(dictionary)의 구조
  • 중괄호({ })로 감싸진 키(key)와 요소(value)의 1대1 매칭으로 구성됨
  • 콜론을 기준으로 앞이 key, 뒤가 value값
  • 아래의 dict의 key값 : 이름, 나이, 다루는 언어
  • dict = {"이름" : "홍길동", "나이" : 28, "다루는 언어" : ["Python", "Java"]}
  • 각 key와 value 쌍은 쉼표(,)로 구분한다
  • key의 값이 겹칠경우 하나 외에는 모두 무시되므로 key는 중복X
  • 하나의 key에 여러 값을 매칭하고 싶을 경우 value를 리스트형태로 지정할 수 있다. 
  • key값은 변하지 않는 값으로만 지정이 가능하다!!
    • ex) 튜플형태는 가능하나 리스트는 불가능하다.

 

딕셔너리(dictionary) 검색
  • key값 조회 ( dict.keys() )
    • d = {"이름" : "홍길동", "나이" : 28, "다루는 언어" : ["Python", "Java"]}
      
      d.keys() # dict_keys(["이름", "나이", "다루는 언어"])
  • key값으로 value 조회 ( dict.values(), dict.get(key값, default값) )
    •  dict.get(key, default) : 입력한 key값을 검색한 후 key값이 없다면 default값을 반환한다.
    • d = {"이름" : "홍길동", "나이" : 28, "다루는 언어" : ["Python", "Java"]}
      
      d["이름"]  # "홍길동"
      d["다루는 언어"]  # ["Python", "Java"]
      d.values() # dict_values(['홍길동', 28, ['Python', 'Java']])
      d.get("이름") # "홍길동" : d["이름"]과 같은 결과!
  • key와 value값 동시에 조회( dict.items() )
    • d = {"이름" : "홍길동", "나이" : 28, "다루는 언어" : ["Python", "Java"]}
      
      d.items() # dict_items([('이름', '홍길동'), ('나이', 28), ('다루는 언어', ['Python', 'Java'])])
  • value값으로 key값 찾기
    • key와 value값 뒤집기
      • 만약 value값 중에 리스트가 있다면 TypeError가 일어나므로 주의!! 
      • dic = {1:"하나", 2:"둘", 3:"셋"}
        dic.keys() # dict_keys([1, 2, 3])
        
        reverse_dic = dict(map(reversed, dic.items()))
        
        print(reverse_dic) # {"하나":1, "둘":2, "셋":3}
        dic.keys() # dict_keys(["하나", "둘", "셋"])
    • for문으로 찾기
      • dic = {1:"하나", 2:"둘", 3:"셋"}
        
        for key, value in dic.items():
            if value=="셋":
                print(key)  # 3

 

딕셔너리(dictionary) 원소 추가
  • dict[key] = value 형태로 추가 가능
  • dic = {}
    
    dic["name"] = "kim"
    print(dic) # {'name': 'kim'}
    
    dic["age"] = 28
    print(dic) # {'name': 'kim', "age":28}
    
    dic["hobby"] = []
    print(dic) # {'name': 'kim', "age":28, "hobby":[]}
    
    dic["hobby"].append("yoga")
    print(dic) # {'name': 'kim', "age":28, "hobby":["yoga"]}
  • dict1.update(dict2) :  dict1을 기준으로 dict2를 추가한다.
  • dic1 = {"key1" : 1, "key2" : 2, "key3" : 3}
    dic2 = {"key3" : 30, "key4" : 40, "key5" : 50}
    
    dic1.update(dic2)
    # 중복된 키가 있다면 왼쪽에 적은 dict기준으로 value값 결정
    print(dic1) # {"key1" : 1, "key2" : 2, "key3" : 3, "key4" : 40, "key5" : 50}

 

딕셔너리(dictionary) 원소 삭제 - del, pop, claer
  • del dict[key] : 지정한 key와 key와 매칭되는 value를 같이 삭제
    • 지정한 key가 존재하지 않을 경우 KeyError가 난다 
    • dic = {'name': 'kim', "age":28, "hobby":["yoga"]}
      
      del dic["age"]
      
      print(dic) # {'name': 'kim', "hobby":["yoga"]}
  • dict.pop(key, default) : 지정한 key와 key와 매칭되는 value를 같이 삭제 단 key가 존재하지 않을 경우 default값 반환
    • default값을 지정하지 않을 경우 del과 같은 KeyError를 반환한다. 
    • dic = {'name': 'kim', "age":28, "hobby":["yoga"]}
      
      dic.pop("age", 404)
      print(dic) # {'name': 'kim', "hobby":["yoga"]}
      
      dic.pop("age", 404) # 404
  • 여러 요소를 삭제해야하는 경우 : for문 이용
    • dic = {'name': 'kim', "age":28, "hobby":["yoga"]}
      
      deleted = [dic.pop(key) for key in ["name", "age"]]
      print(deleted) # ["kim", 28]
      print(dic) #{"hobby":["yoga"]}
  • del이 성능상 삭제한 값을 반환하는 pop보다 2배정도 빠르지만 key가 존재하지 않을 경우 에러를 발생시키기 때문에 del은 key값을 확실히 알고있을때 사용할 것!

 

  • dict.clear() : 모든 요소 삭제하기
    • dic = {'name': 'kim', "age":28, "hobby":["yoga"]}
      
      dic.clear()
      print(dic) # {}

댓글