파이썬 | 딕셔너리 (dictionary)

CHOI·2021년 10월 22일
0

Python

목록 보기
8/33
post-thumbnail

1. 딕셔너리

지금까지 봤었던 리스트나 튜블은 값들이 일렬로 넣어져 있을 뿐 어떠한 연관 관계가 없었다.

예를 들어서 게임 캐릭터의 능력치를 리스트에 저장해보자

lux = [490, 334, 550, 18.72]

위의 능력치는 [채력, 마나, 사거리, 방어력] 순서이다. 그런데 위 처럼 숫자만 보아서 어떤게 어떤 능력치인지 알아보기가 힘들다. 이러한 문제점 때문에 나온 것이 딕셔너리이다.

파이썬에서는 연관된 값을 묶어서 저장하는 용도로 딕셔너리(dictionary)라는 자료형을 제공한다. 그러면 이제 이 딕셔너리를 사용하여 게임 캐릭터의 능력치를 나타내보자

lux = {'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}

이제 딕셔너리만 봐도 lux라는 캐릭터의 체력(health)은 490, 마나(mana)는 334, 사거리(melee)는 550, 방어력(armor)은 18.72라는 것을 쉽게 알 수 있다. 이렇게 딕셔너리는 값 마다 이름을 붙여서 사용한다.

딕셔너리 만들기

딕셔너리는 중괄호 안에서 키 : 값 형식으로 저장하며 각 키와 값은 콤마로 구분한다.

그러면 값이 4개가 들어있는 딕셔너리를 만들어보자.

>>> lux = {'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}
>>> lux
{'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}

딕셔너리는 키를 먼저 지정하고 거기에 콜론( : )을 붙여 값을 지정한다. 특히 키에는 값을 하나만 지정할 수 있으며 이러한 특성을 따서 키-값 쌍(key-value pair) 라고 부른다.

중복된 키

>>> lux = {'health': 490, 'health': 800, 'mana': 334, 'melee': 550, 'armor': 18.72}
>>> lux['health']    # 키가 중복되면 가장 뒤에 있는 값만 사용함
800
>>> lux    # 중복되는 키는 저장되지 않음
{'health': 800, 'mana': 334, 'melee': 550, 'armor': 18.72}

위는 'health' 라는 키를 두 번 정의했다. 이럴 경우에는 가장 마지막에 정의한 값이 저장이 된다. 정리하자면

  • 키와 값이 중복될 경우 마지막에 정의된 값만 사용한다.

딕셔너리 키의 자료형

딕셔너리 키에는 문자열 뿐만 아니라 정수, 실수, 불도 사용할 수 있으며 자료형을 섞어서 사용해도 된다. 그리고 값에는 리스트, 딕셔너리 등을 포함하여 모든 자료형을 사용할 수 있다.

>>> x = {100 : 'max', 10.23 : [4,3,4], False : 0}
>>> x
{100: 'max', 10.23: [4, 3, 4], False: 0}

단, 키에는 리스트나 딕셔너리를 사용할 수 없다.

빈 딕셔너리 만들기

>>> x = {}
>>> x
{}
>>> y = dict()
>>> y
{}

리스트와 비슷한 방법으로 빈 딕셔너리를 만들 수 있다.

dict 로 딕셔너리 만들기

dict 를 활용해서 딕셔너리를 만들때에는 다음과 같이 여러가지 방법을 통해서 만들 수 있다.

  • 딕셔너리 = dict(키1=값1, 키2=값2)
>>> pike = dict(health = 600, mana = 200, melee = 170, armor = 25.4)
>>> pike
{'health': 600, 'mana': 200, 'melee': 170, 'armor': 25.4}

'키 = 값' 형식으로 디렉토리를 만들 수 있다. 여기서 주의할 점은 '키' 에는 따음표를 사용하지 않는다는 점이다.

  • 딕셔너리 = dict(zip([키1, 키2], [값1, 값2]))
>>> pike = dict(zip(['health', 'mana', 'melee', 'armor'], [600, 200, 170, 25.4]))
>>> pike
{'health': 600, 'mana': 200, 'melee': 170, 'armor': 25.4}

zip 을 활용해서 만드는 방법이다. zip 에 대한 자세한 내용은 여기

물론 리스트 대신에 튜플을 사용해도 된다.

  • 딕셔너리 = dict([(키1, 값1), (키2, 값2)])
>>> rel = dict([('health', 400), ('mana', 340), ('melee', 200), ('armor', 60)])
>>> rel
{'health': 400, 'mana': 340, 'melee': 200, 'armor': 60}

(키, 값) 형식의 튜플을 나열하는 방법이다.

  • 딕셔너리 = dict({키1: 값1, 키2: 값2})
>>> joy = dict({'health' : 500, 'mana' : 380 , 'melee' : 346, 'armor' : 33.3})
>>> joy
{'health': 500, 'mana': 380, 'melee': 346, 'armor': 33.3}

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

>>> lux = {'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}
>>> lux['health']
490
>>> lux['armor']
18.72
  • 딕셔너리[키] 형태로 값에 접근할 수 있다.

위를 활용하면

>>> 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}

이런식으로 키에 해당하는 값을 변경할 수 있다.

딕셔너리에 키 있는지 확인 ( in )

>>> lux
{'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}
>>> 'health' in lux
True
>>> 'attack_speed' not in lux
True
  • 키 in 딕셔너리 를 하면 불 형태로 '키' 가 딕셔너리에 있는지 확인할 수 있다.

물론 not in 도 활용이 가능하다.

% 해시(Hash)

딕셔너리는 해시(Hash) 기법을 이용하여 데이터를 저장한다. 보통 딕셔너리 같이 키-값 형태의 자료형을 '해시', '해시 맵', '해시 테이블' 등으로 부르기도 한다.

딕셔너리 키의 개수 ( len )

>>> 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 을 사용하면 딕셔너리 키의 개수를 구할 수 있다.

지금까지 딕셔너리에 대해서 알아보았다. 딕셔너리를 생성할 때 중괄호{} 를 사용하고 키와 값의 형태가 1:1 관계로 저장한다는 점이 중요하다. 특히 딕셔너리는 특정 주제에 대한 연관된 값을 저장할 때 사용한다는 점도 까먹으면 안된다. 이 점이 딕셔너리와 리스트, 튜플과의 차이점이다.

profile
벨로그보단 티스토리를 사용합니다! https://flight-developer-stroy.tistory.com/

0개의 댓글