Python 기본 - 5. 튜플과 딕셔너리 자료형

튜플(tuple)은 리스트와 거의 유사하지만 다음과 같은 차이점이 있다.

  • 대괄호 []가 아닌, 소괄호 ()를 사용
  • 리스트는 요소의 변경이 가능하지만, 튜플은 변경이 불가능 (immutable)

얼핏 보면 리스트보다 튜플이 나은 점이 없어 보이는데, 언제 사용하는 걸까?

튜플은 변경이 불가능하다는 속성 자체가 가치있다.

즉 여러 명의 개발자가 같이 프로젝트를 진행할 경우, 어떤 요소들을 튜플로 표시했을 때 다른 개발자가 보고 ‘아 이것은 변경하지 말라는 소리구나’ 라고 이해할수 있다.

그리고 일반적인 경우에도 값이 바뀌는 상황이 걱정될 경우, 튜플을 일부러 사용하기도 한다.

딕셔너리(dictionary) 자료형은 대응 관계를 표시한다.

key와 value가 한 쌍이 되는데, 딕셔너리 자료형에서 값을 찾을 때는 index가 아닌 key로 이에 대응되는 값을 찾게 된다.

1
2
3
4
5
6
7
8
>>> dict = {"name" : "김정욱", "age" : 26}
>>> print(dict["name"])
김정욱
>>> print(dict["age"])
26
>>> dict["home"] = "Daejeon" #딕셔너리 쌍 추가하기
>>> print(dict)
{"name" : "김정욱", "age" : 26, "home" : "Daejeon"}

딕셔너리 관련 함수들이 몇 가지 있는데, 기본적인 것만 간단하게 살펴보자.

Key 및 Value 리스트 생성하기 (keys, values)

1
2
3
4
5
6
7
8
>>> a = {"name" : "김정욱", "age" : 26}
>>> print(a.keys()) #keys() 함수 사용
dict_keys(["name", "age"]) #dict_keys 객체 리턴
>>> print(list(a.keys())) #list로 변환
["name", "age"]

>>> print(a.values()) #values() 함수 사용
dict_values("김정욱", 26)

Key 와 Value 쌍 생성하기 (items)

1
2
3
>>> a = {"name" : "김정욱", "age" : 26}
>>> print(a.items()) #items() 함수 사용
dict_items([("name", "김정욱"), ("age", 26)])

Key 와 Value 쌍 모두 지우기 (clear)

1
2
3
4
>>> a = {"name" : "김정욱", "age" : 26}
>>> a.clear() #clear() 함수 사용
>>> print(a)
{}

Key 로 Value 얻기 (get)

get(x) 함수는 x라는 key에 대응되는 value를 반환한다. 딕셔너리 자료형의 핵심이라고 보면 된다.

1
2
3
4
5
6
7
>>> a = {"name" : "김정욱", "age" : 26}
>>> print(a.get("name"))
"김정욱"
>>> print(a.get("age"))
26
>>> print(a.get("major")) #a에 없는 key값을 넣었을 때?!
None

위 코드를 살펴보면, 현재 a라는 딕셔너리에는 key가 “name” , “age” 두 개 뿐이다.

그런데, 6번째 줄에서 “major”라는 존재하지 않는 key를 get() 함수를 이용해 지정한 경우, None을 반환한다.

이를 이용하는 대단히 휼륭한 예시가 있다.

당신에게 이름, 나이, 전공이 기록된 엑셀 파일이 있다고 하자.

하지만 이번 년도에 새로 입학하는 신입생들은 전공이 아직 없다.

위의 get() 함수를 사용하면 전공이 입력되지 않은 학생들을 “새내기”로 반환할 수 있다.

1
2
3
4
5
6
>>> a = {"name" : "김정욱", "age" : 26, "major" : "Business"}
>>> b = {"name" : "이하린", "age" : 20}
>>> print(a.get("major", "새내기"))
"Business"
>>> print(b.get("major", "새내기"))
"새내기"

4번째 줄은 key가 “major”인 value, “Business”를 반환하게 한다.

그러나 6번째 줄은 “major” 이라는 key가 없을 경우 “새내기” 라고 반환하게 한다.

해당 Key가 딕셔너리 안에 있는지 조사하기 (in)

1
2
3
4
5
>>> a = {"name" : "김정욱", "age" : 26, "major" : "Business"}
>>> "name" in a
True
>>> "email" in a
False