티스토리 뷰

Python

[Python] 기본 문법 정리 (3)

SeYuNi 2024. 2. 3. 01:38

딕셔너리 사용하기

리스트와 튜플은 값 여러 개를 일렬로 저장할 뿐 값끼리 연관 관계가 없었다.

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

딕셔너리는 값마다 이름을 붙여서 저장하는 방식이다.

즉, 사전(dictionary)에서 단어를 찾듯이 값을 가져올 수 있다고 하여 딕셔너리라고 부른다.

 

딕셔너리 만들기

딕셔너리는 { }(중괄호) 안에 키: 값 형식으로 저장하며 각 키와 값은 ,(콤마)로 구분해준다.

  • 딕셔너리 = {키1: 값1, 키2: 값2}
>>> lux = {'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}
>>> lux
{'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}

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

딕셔너리에 키와 값을 저장할 때 키가 중복되면 가장 뒤에 있는 값만 사용한다. 따라서 중복되는 키는 저장되지 않는다.

 

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

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

 

빈 딕셔너리 만들기

빈 딕셔너리를 만들 때는 { }만 지정하거나 dict를 사용하면 된다. 보통은 { }를 주로 사용한다.

  • 딕셔너리 = {}
  • 딕셔너리 = dict()

 

dict로 딕셔너리 만들기

dict는 키와 값을 연결하거나, 리스트, 튜플, 딕셔너리로 딕셔너리를 만들 때 사용한다.

  • 딕셔너리 = dict(키1=값1, 키2=값2)
  • 딕셔너리 = dict(zip([키1, 키2], [값1, 값2]))
  • 딕셔너리 = dict([(키1, 값1), (키2, 값2)])
  • 딕셔너리 = dict({키1: 값1, 키2: 값2})

먼저 다음과 같이 dict에서 키=값 형식으로 딕셔너리를 만들 수 있다. 이때는 키에 ' '(작은따옴표)나 " "(큰따옴표)를 사용하지 않아야 한다. 키는 딕셔너리를 만들고 나면 문자열로 바뀐다.

>>> lux1 = dict(health=490, mana=334, melee=550, armor=18.72)    # 키=값 형식으로 딕셔너리를 만듦
>>> lux1
{'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}

 

두 번째 방법은 dict에서 zip 함수를 이용하는 방법이다. 다음과 같이 키가 들어있는 리스트와 값이 들어있는 리스트를 차례대로 zip에 넣은 뒤 다시 dict에 넣어주면 된다.

>>> lux2 = dict(zip(['health', 'mana', 'melee', 'armor'], [490, 334, 550, 18.72]))    # zip 함수로
>>> lux2                                                            # 키 리스트와 값 리스트를 묶음
{'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}

키와 값을 리스트가 아닌 튜플에 저장해서 zip에 넣어도 된다.

 

세 번째 방법은 리스트 안에 (키, 값) 형식의 튜플을 나열하는 방법이다.

>>> lux3 = dict([('health', 490), ('mana', 334), ('melee', 550), ('armor', 18.72)])
>>> lux3                                                  # (키, 값) 형식의 튜플로 딕셔너리를 만듦
{'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}

 

네 번째 방법은 dict 안에서 중괄호로 딕셔너리를 생성하는 방법이다.

>>> lux4 = dict({'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72})     # dict 안에서
>>> lux4                                                           # 중괄호로 딕셔너리를 만듦
{'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}

이처럼 딕셔너리는 키를 통해서 값의 의미를 파악하기 쉽다.

 

딕셔너리의 키에 접근하기

딕셔너리의 키에 접근할 때는 딕셔너리 뒤에 [ ](대괄호)를 사용하며 [ ] 안에 키를 지정해주면 된다.

  • 딕셔너리[키]
>>> 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}

딕셔너리에서 키의 값을 출력할 때와 마찬가지로 [ ]에 키를 지정한 뒤 값을 할당하면 된다. 특히 딕셔너리는 없는 키에 값을 할당하면 해당 키가 추가되고 값이 할당된다.

>>> lux['mana_regen'] = 3.28    # 키 'mana_regen'을 추가하고 값 3.28 할당
>>> lux
{'health': 2037, 'mana': 1184, 'melee': 550, 'armor': 18.72, 'mana_regen': 3.28}

딕셔너리는 없는 키에서 값을 가져오려고 하면 에러가 발생한다.

 

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

딕셔너리에서 키가 있는지 확인하고 싶다면 in 연산자를 사용하면 된다.

  • 키 in 딕셔너리
>>> lux = {'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}
>>> 'health' in lux
True
>>> 'attack_speed' in lux
False

이처럼 딕셔너리에 특정 키가 있으면 True, 없으면 False가 나온다.

 

반대로 in 앞에 not을 붙이면 특정 키가 없는지 확인한다.

  • 키 not in 딕셔너리
>>> 'attack_speed' not in lux
True
>>> 'health' not in lux
False

 not in은 특정 키가 없으면 True, 있으면 False가 나온다.

 

딕셔너리의 키 개수 구하기

키의 개수는 len 함수를 사용하여 구한다.(키와 값은 1:1 관계이므로 키의 개수는 곧 값의 개수이다)

  • 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(lux)와 같이 len에 딕셔너리 변수를 넣어서 키의 개수를 구해도 되고, len에 딕셔너리를 그대로 넣어도 된다.

 

딕셔너리를 생성할 때는 { }(중괄호)를 사용하고, 키와 값을 1:1 관계로 저장한다는 점이 중요하다. 특히 딕셔너리는 특정 주제에 대해 연관된 값을 저장할 때 사용한다. 이 부분이 리스트, 튜플과 딕셔너리의 차이점이다.

 

 

 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함