본문 바로가기
Python 코딩도장

파이썬 코딩도장 Unit 12 정리 : 딕셔너리

by chanfficial 2022. 1. 12.

Unit 12

딕셔너리 사용하기

: 파이썬에서는 연관된 값을 묶어서 저장하는 용도로 딕셔너리라는 자료형을 제공한다.

 

1. 딕셔너리 만들기

  • 딕셔너리는 { } (중괄호) 안에 '키 : 값' 형식으로 저장하며 각 키와 값은 ,(콤마)로 구분한다.
  • 키에는 값을 하나만 지정할 수 있고, 이런 특성을 따서 키-값 쌍(key-value pair)이라 부른다.(키-값은 1:1 대응)
    # 딕셔너리 = {키1: 값1, 키2: 값2}
    >>> lux = {'health': 490, 'hp': 334, 'ep': 550, 'xp': 18.72}
    >>> lux
    {'health': 490, 'hp': 334, 'ep': 550, 'xp': 18.72}​

1-1. 키 이름이 중복되는 경우

  • 딕셔너리에 키와 값을 저장할 때 키가 중복되면 가장 뒤에 있는 값만 사용하므로 중복되는 키는 저장되지 않는다.
    >>> lux = {'health': 490, 'health': 800, 'hp': 334, 'ep': 550, 'xp': 18.72}
    >>> lux['health'] # 키가 중복되면 가장 뒤에 있는 값만 사용함
    800
    >>> lux # 중복되는 키는 저장되지 않음
    {'health': 800, 'hp': 334, 'ep': 550, 'xp': 18.72}​

1-2. 딕셔너리 키의 자료형

  • 딕셔너리의 키는 문자열뿐만 아니라 정수, 실수, 불(Bool)도 사용할 수 있으며 자료형을 섞어서 사용 가능하다.
  • 딕셔너리의 값에는 리스트, 딕셔너리 등을 포함하여 모든 자료형을 사용할 수 있다.
  • 키에는 리스트와 딕셔너리를 사용할 수 없다.
    >>> x = {100: 'hundred', False: 0, 3.5: [3.5, 3.5]}
    >>> x
    {100: 'hundred', False: 0, 3.5: [3.5, 3.5]}​

1-3. 빈 딕셔너리 만들기

  • 빈 딕셔너리를 만들 때는 { }만 지정하거나 dict를 사용하면 된다.(주로 { } 사용함)
    >>> x = {}
    >>> x
    {}
    >>> y = dict()
    >>> y
    {}​

1-4. dict로 딕셔너리 만들기

  • dict는 키와 값을 연결하거나 리스트, 튜플, 딕셔너리로 딕셔너리를 만들 때 사용한다.
    • 딕셔너리 = dict([(키1, 값1), (키2, 값2)])
    • 딕셔너리 = dict({키1: 값1, 키2: 값2})
  • 첫 번째 방법 : 딕셔너리는 '키=값'의 형식으로 딕셔너리를 만들 수 있는데 이때는 키에 ' '(작은따옴표)나 " "(큰따옴표)를 사용하지 않아야 한다.
  • 키는 딕셔너리를 만들고 나면 문자열로 바뀐다.
    # 딕셔너리 = dict(키1=값1, 키2=값2)
    >>> lux1 = dict(health=490, mana=334, melee=550, armor=18.72)    # 키=값 형식으로 딕셔너리를 만듦
    >>> lux1
    {'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}
  • 두 번째 방법 : 키가 들어있는 리스트와 값이 들어있는 리스트를 차례대로 zip에 넣은 뒤 다시 dict에 넣어준다.
    # 딕셔너리 = dict(zip([키1, 키2], [값1, 값2]))
    >>> lux2 = dict(zip(['health', 'mana', 'melee', 'armor'], [490, 334, 550, 18.72])) # zip 함수로
    >>> lux2 # 키 리스트와 값 리스트를 묶음
    {'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}
  • 세 번째 방법 : 리스트 안에 (키, 값) 형식의 튜플을 나열한다.
    # 딕셔너리 = dict([(키1, 값1), (키2, 값2)])
    >>> lux3 = dict([('health', 490), ('mana', 334), ('melee', 550), ('armor', 18.72)])
    >>> lux3 # (키, 값) 형식의 튜플로 딕셔너리를 만듦
    {'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}​
  • 네 번째 방법 : dict 안에서 중괄호로 딕셔너리를 생성한다.
    # 딕셔너리 = dict({키1: 값1, 키2: 값2})
    >>> lux4 = dict({'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}) # dict 안에서 중괄호로 딕셔너리를 만듦
    >>> lux4  
    {'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}​
  • 이처럼 딕셔너리는 키를 통해서 값의 의미를 파악하기 쉽기 때문에 특정 주제에 대해 연관된 값들을 모아둘 때 주로 사용한다.

 

2. 딕셔너리의 키에 접근하고 값 할당하기

  • 딕셔너리의 키에 접근할 때는 딕셔너리 뒤에 [ ] (대괄호)를 사용하며 [ ] 안에 키를 지정해주면 된다.
  • 딕셔너리에 키를 지정하지 않은 상태는 해당 딕셔너리 전체를 뜻한다.
    # 딕셔너리[키]
    >>> lux = {'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}
    >>> lux['health']
    490
    >>> lux # 딕셔너리에 키를 지정하지 않으면 딕셔너리 전체를 뜻함
    {'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}​

2-1. 딕셔너리의 키에 값 할당하기

  • 딕셔너리는 [ ]로 키에 접근하여 값을 할당한다.
  • 딕셔너리는 없는 키에 값을 할당하면 해당 키가 추가되고 값이 할당된다.
    >>> lux = {'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}
    >>> lux['health'] = 2037    # 키 'health'의 값을 2037로 변경
    >>> lux['mana'] = 1184      # 키 'mana'의 값을 1184로 변경
    >>> lux
    {'health': 2037, 'mana': 1184, 'melee': 550, 'armor': 18.72}
    >>> lux['mana_regen'] = 3.28 # 키 'mana_regen'을 추가하고 값 3.28 할당
    >>> lux
    {'health': 2037, 'mana': 1184, 'melee': 550, 'armor': 18.72, 'mana_regen': 3.28}​

2-2. 딕셔너리에 키가 있는지 확인하기

  • 딕셔너리에서 키가 있는지 확인하고 싶다면 in 연산자를 사용한다.
    # 키 in 딕셔너리
    >>> lux = {'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}
    >>> 'health' in lux
    True
    >>> 'attack_speed' in lux
    False​
  • in 앞에 not을 붙이면 특정 키가 없는지 확인할 수 있다.
    # 키 not in 딕셔너리
    >>> 'attack_speed' not in lux
    True
    >>> 'health' not in lux
    False​
  • 딕셔너리는 해시(Hash) 기법을 이용해서 데이터를 저장하고 딕셔너리와 같은 키-값 형태의 자료형을 해시, 해시 맵, 해시테이블 등으로 부르기도 한다.

 

2-3. 딕셔너리의 키 개수 구하기

  • 딕셔너리의 키의 개수는 len 함수를 사용하여 구한다.(키와 값은 1:1 관계이므로 키의 개수 = 값의 개수)
    >>> lux = {'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}
    >>> len(lux)
    4
    >>> len({'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72})
    4​
    - len(lux)처럼 len에 딕셔너리 변수를 넣어서 키의 개수를 구해도 되고, len에 딕셔너리를 그대로 넣어도 된다. 

정리 참조

https://dojang.io/course/view.php?id=7