Py) 기초 - 객체(딕셔너리)

Py) 기초 - 객체(딕셔너리)

파이썬 기반 데이터분석을 위하여 파이썬 기본 객체중 하나인 딕셔너리(dictionary)에 대해 알아본다.


개요

딕셔너리(dictionary)는 중괄호를 사용하여 생성하며 키와 값의 쌍으로 구성됨. 하나의 키에 하나의 값이 할당되나 그 값은 원소 또는 객체가 될 수 있다. 향후 Pandas 객체의 생성과 조작에 활용되기도 하고 JSON 파일 형식과도 유사해 해당 파일을 다룰 때도 딕셔너리를 많이 사용한다.

  • 생성
    키는 보통 따옴표를 사용한 문자로 지정(숫자 사용 지양)하며 그 다음에 콜론을 작성하고 콜론 다음에는 값(또는 객체)를 선언함. 그리고 각 키는 쉼표로 구분한다.

  • 색인
    한번에 특정 키의 특정 원소에 접근할 수 없으며 어떤 원소에 접근하기 위해서는 반드시 해당 원소와 연결되어있는 키를 통해야 한다.

  • 조작
    키를 추가하거나 삭제할 수 있으며 키에 연결된 값의 경우 해당 값 또는 객체의 문법을 따른다.

실습

생성 및 인덱싱

다음과 같이 중괄호를 사용하여 생성하며 키(key)와 값(value)의 쌍은 쉼표로 구분해준다. 값의 경우 단일 원소도 가능한데 2개 이상의 원소를 단일 키에 지정하고 싶다면 다음 코드의 “dic_2” 객체처럼 리스트나 튜플 같은 객체로 할당해야 한다. 키는 반드시 값과 쌍이 되어야 하며 “dic_3” 객체처럼 쌍이 되지 않으면 에러를 유발한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dic_1 = {"k1": 1}
dic_1
## {'k1': 1}

dic_2 = {"key1": [333, 444, 555],
"key2": (100, 200)}
dic_2
## {'key1': [333, 444, 555], 'key2': (100, 200)}

dic_3 = {"k1": } # error!!
dic_3
File "C:\Users\encai\AppData\Local\Temp\ipykernel_24112\3753403634.py", line 1
dic_3 = {"k1": }
^
SyntaxError: invalid syntax

딕셔너리 객체의 값에 접근하기 위해서는 반드시 해당 값과 연결된 키를 거쳐서 들어가야 한다. 그래서 딕셔너리의 값에 접근하기 위해서는 보통 2개 이상의 대괄호를 연속으로 사용한다.

1
2
3
4
5
6
7
8
dic_2["key1"]
## [333, 444, 555]

dic_2["key1"][0]
## 333

dic_2["key1"][1:]
## [444, 555]

만약 다음과 같이 키를 명시하지 않고 세 번째 키에 접근하고자 하는 경우 에러가 발생한다.

1
2
3
4
5
6
7
dic_2[2]
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_24112\3736396143.py in <module>
----> 1 dic_2[2]

KeyError: 2

단, 키가 문자가 아닌 숫자로 지정된 경우 다음처럼 정상 동작하기도 한다.

1
2
3
4
5
6
dic_4 = {3: 2}
dic_4
### {3: 2}

dic_4[3]
## 2

딕셔너리에는 키 또는 값을 한 번에 일괄로 가져오는 메서드가 존재하는데 키를 가져오는 .keys() 는 종종 유용하게 사용된다.

1
2
3
4
5
dic_2.keys()
## dict_keys(['key1', 'key2'])

dic_2.values()
## dict_values([[333, 444, 555], (100, 200)])

치환 및 조작

특정 키의 값을 변경해보자.

1
2
3
4
5
6
7
dic_2["key1"][0] = -999
dic_2["key1"]
## [-999, 444, 555]

dic_2["key2"] = 1234
dic_2["key2"]
## 1234
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×