튜플(Tuple), 딕셔너리(Dictionary)

밤비나·2023년 3월 20일

튜플(Tuple)은 리스트와 마찬가지로 여러 개의 값을 저장하는 자료형 중 하나이다. 하지만 리스트와는 다르게 값의 추가, 수정, 삭제 등이 불가능하며, 불변(immutable)한 특성을 가지고 있다.

튜플은 괄호()로 묶어서 표현하며, 각 값들은 쉼표(,)로 구분한다. (1, 2, 3)과 같이 표현할 수 있다.

튜플은 리스트와 마찬가지로 여러 가지 방법으로 활용할 수 있다. 예를 들어, 다음과 같은 코드를 통해 튜플을 생성하고, 값을 접근할 수 있다.

my_tuple = (1, 2, 3)
print(my_tuple[0])  # 1

my_tuple = (1, 2, 3)
my_tuple[0] = 4  # TypeError 발생

하지만 값을 읽는 것은 가능하다. 또한, 다음과 같이 여러 개의 변수에 동시에 값을 할당하는 것도 가능하다.

my_tuple = (1, 2, 3)
a, b, c = my_tuple
print(a)  # 1
print(b)  # 2
print(c)  # 3
# 튜플 예시 코드
my_tuple = (1, 2, 3)
print(my_tuple[0])  # 1
my_tuple[0] = 4  # TypeError 발생

# 리스트 예시 코드
my_list = [1, 2, 3]
print(my_list[0])  # 1
my_list[0] = 4
print(my_list)  # [4, 2, 3]

튜플과 리스트는 서로 변환이 가능하다.
튜플을 리스트로 변환하기 위해서는 list() 함수를 사용한다.

my_tuple = (1, 2, 3)
my_list = list(my_tuple)
print(my_list)  # 출력 결과: [1, 2, 3]
my_list = [1, 2, 3]
my_tuple = tuple(my_list)
print(my_tuple)  # 출력 결과: (1, 2, 3)

튜플은 선언 후에 내부 아이템을 변경할 수 없다. 하지만 리스트는 내부 아이템을 변경할 수 있다. 따라서 데이터의 변경이 필요하지 않은 경우에는 튜플을 사용하는 것이 좋다. 또한 리스트는 동적으로 크기를 조절할 수 있기 때문에, 크기가 변하는 데이터를 다루는 경우에는 리스트를 사용하는 것이 좋다.

튜플에서 in, not in 연산자는 해당 값이 튜플 안에 있는지 없는지를 검사한다.

# in 연산자 예제
my_tuple = (1, 2, 3, 4, 5)
print(3 in my_tuple)  # True
print(6 in my_tuple)  # False

# not in 연산자 예제
my_tuple = ('apple', 'banana', 'orange')
print('apple' not in my_tuple)  # False
print('grape' not in my_tuple)  # True
  • 튜플 개수 세기
# 튜플 생성
my_tuple = (1, 2, 3, 4, 5, 3)

# count() 함수를 이용한 아이템 개수 세기
count_3 = my_tuple.count(3)
print("튜플에서 3의 개수:", count_3) # 2

# len() 함수를 이용한 튜플 전체 아이템 개수 세기
length = len(my_tuple)
print("튜플 전체 아이템 개수:", length) # 6
  • 튜플 슬라이싱
my_tuple = (1, 2, 3, 4, 5)
new_tuple = my_tuple[1:4]
print(new_tuple)
my_tuple = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
my_slice = my_tuple[1:5]
print(my_slice)  # (2, 3, 4, 5)
my_slice = my_tuple[1:9:2]
print(my_slice)  # (2, 4, 6, 8)

튜플의 슬라이싱은 리스트와 마찬가지로 인덱스를 이용하여 범위를 지정한다. 튜플 슬라이싱에서 주의해야 할 점은, 슬라이싱의 결과는 항상 새로운 튜플 객체가 반환된다는 것이다. 즉, 원본 튜플은 변경되지 않는다.

튜플 슬라이싱을 이용하여, 튜플의 일부분만 추출하거나, 역순으로 정렬된 튜플을 얻을 수 있다.

  • 튜플 정렬

튜플은 수정이 불가능한 자료형이므로, 원본 튜플을 정렬할 수는 없다. 하지만 sorted() 함수를 사용하여 정렬된 새로운 리스트를 반환할 수 있다. sorted() 함수는 튜플 뿐만 아니라 모든 iterable한 객체에 사용할 수 있다.

tup = (3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5)

sorted_tup = sorted(tup)
print(sorted_tup)
# [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

# 내림차순으로 정렬하려면 sorted() 함수의 reverse 매개변수를 True로 지정하면 된다.
reverse_tup = sorted(tup, reverse=True)
print(reverse_tup)
# [9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]


딕셔너리(Dictionary)는 Key와 Value가 쌍으로 이루어진 데이터 구조이다. Key는 중복이 불가능하고, Immutable한 자료형을 사용해야 한다. Value는 중복이 가능하며, 어떠한 데이터형도 사용 가능하다. Key를 통해 Value를 빠르게 검색할 수 있으며, 순서가 없기 때문에 인덱스로 접근할 수 없다.

딕셔너리는 중괄호 {}를 사용하여 생성하며, Key와 Value는 콜론(:)으로 구분한다. Key를 통해 Value에 접근할 수 있으며, Key가 존재하지 않으면 KeyError가 발생한다. 또한, Key가 중복되면 나중에 나온 Key에 해당하는 Value가 덮어씌워진다.

딕셔너리의 주요 메소드로는 keys(), values(), items() 등이 있다.

  • keys(): 딕셔너리의 Key들을 리스트로 반환한다.
  • values(): 딕셔너리의 Value들을 리스트로 반환한다.
  • items(): 딕셔너리의 Key-Value 쌍들을 튜플로 묶은 리스트를 반환한다.
  • get(key, default): 주어진 Key에 대한 Value를 반환한다. 만약 Key가 딕셔너리에 존재하지 않을 경우, default 값을 반환한다.
  • update(dict): 다른 딕셔너리(dict)의 Key-Value 쌍을 현재 딕셔너리에 추가한다.
  • pop(key): 주어진 Key에 해당하는 Value를 반환하고, 해당 Key-Value 쌍을 딕셔너리에서 삭제한다.
# 딕셔너리 생성
my_dict = {'apple': 3, 'banana': 2, 'cherry': 5}

# Key를 이용한 Value 조회
print(my_dict['apple'])  # 출력값: 3

# Key를 이용한 Value 변경
my_dict['apple'] = 4
print(my_dict['apple'])  # 출력값: 4

# Key와 Value 추가
my_dict['durian'] = 6
print(my_dict)  # 출력값: {'apple': 4, 'banana': 2, 'cherry': 5, 'durian': 6}

# Key가 존재하지 않는 경우 KeyError 발생
# print(my_dict['grape'])  # KeyError 발생

# Key가 있는지 확인하기
print('banana' in my_dict)  # 출력값: True
print('grape' in my_dict)  # 출력값: False

# Key와 Value 삭제하기
del my_dict['cherry']
print(my_dict)  # 출력값: {'apple': 4, 'banana': 2, 'durian': 6}

# 모든 Key 조회하기
print(my_dict.keys())  # 출력값: dict_keys(['apple', 'banana', 'durian'])

# 모든 Value 조회하기
print(my_dict.values())  # 출력값: dict_values([4, 2, 6])

# 모든 Key와 Value 조회하기
print(my_dict.items())  # 출력값: dict_items([('apple', 4), ('banana', 2), ('durian', 6)])
# 딕셔너리 생성
fruits = {
    'apple': 2,
    'banana': 4,
    'orange': 1
}

# keys() 메소드 사용
print(fruits.keys())  # 출력 결과: dict_keys(['apple', 'banana', 'orange'])

# values() 메소드 사용
print(fruits.values())  # 출력 결과: dict_values([2, 4, 1])

# items() 메소드 사용
print(fruits.items())  # 출력 결과: dict_items([('apple', 2), ('banana', 4), ('orange', 1)])

# get() 메소드 사용
print(fruits.get('apple', 0))

딕셔너리는 리스트와 달리 인덱스를 사용할 수 없지만, Key를 이용하여 빠른 검색이 가능하다는 장점이 있다. 또한, 데이터가 Key-Value 쌍으로 이루어져 있어서 가독성이 높고, 데이터의 구조와 관련된 정보들을 쉽게 파악할 수 있다는 장점이 있다.

  • in, not in, clear, len
my_dict = {'apple': 1, 'banana': 2, 'orange': 3}
print('apple' in my_dict)   # True
print('melon' in my_dict)   # False

my_dict = {'apple': 1, 'banana': 2, 'orange': 3}
print('apple' not in my_dict)   # False
print('melon' not in my_dict)   # True

my_dict = {'apple': 1, 'banana': 2, 'orange': 3}
my_dict.clear()
print(my_dict)   # {}
my_dict = {'apple': 3, 'banana': 2, 'orange': 1}
3 in my_dict.values()  # True
my_dict = {'apple': 2, 'banana': 3, 'orange': 4}
print(len(my_dict))  # 출력결과: 3

# 빈 딕셔너리의 경우
empty_dict = {}
print(len(empty_dict))  # 출력결과: 0
profile
씨앗 데이터 분석가.

0개의 댓글