아이와 함께 배우는 세상 사는 법

[파이썬 강좌] 5. Python 프로그래밍 기초 : 맵핑형 자료형(data type) 본문

파이썬(python)/문법(syntax)

[파이썬 강좌] 5. Python 프로그래밍 기초 : 맵핑형 자료형(data type)

CosmoEduVenture 2024. 2. 19. 20:33
반응형

반응형

딕셔너리(dictionary)

  딕셔너리(dictionary)는 키(key)와 값(value)이 한 쌍으로 맵핑된 자료형으로 시퀀스 자료형과 달리 순서가 없기 때문에 데이터에 접근할 때, 인덱스가 아닌 키(key)를 사용하여 값(value)에 접근할 수 있습니다.

sequence vs non-sequence

딕셔너리 자료형 구조 및 사용법

객체 = { key : value }
dict1 = {key1:value1, key2:value2, key3:value3...}
딕셔너리는 중괄호({ })를 사용하여 키와 값 데이터 한 쌍을 맵핑하여 데이터를 저장.
키(key)와 값(value)은 콜론(:)을 사용하여 구분.

  이때 키(key)는 선언되는 객체 내에서 중복되지 않은 유일성을 가지는 자료형만 사용할 수 있으며, 하나의 딕셔너리 객체에서 동일 한 키(key)를 사용하여 요소를 구성하면 마지막에 선언된 값(value)으로 덮어쓰게 되니 참고하세요.

# 딕셔너리 생성
dict1 = {}	# 빈 딕셔너리
dict2 = {1: "apple", 'f1': "banana", 3: "orange"}
dict3 = {'k1': [1,2,3], 'k2': ('A','1'), 3: 'value3'}

# 자료형 변환
lst = [(key,value),(1,2)]	# 리스트 자료형
dict4 = dict(lst)		# 리스트를 딕셔너리 자료형으로 변환

  딕셔너리의 키를 사용하여 데이터 접근하는 방법과 추가 및 삭제 그리고 메서드 사용 방법은 다음의 예제를 참고하세요.

# 딕셔너리 생성
my_dict = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}

# 딕셔너리 키로 값 접근
print(my_dict['key1'])  # 'value1' 출력

# 딕셔너리 값 변경
my_dict['key2'] = 'new_value2'
print(my_dict['key2'])

# 딕셔너리 키-값 쌍 추가
my_dict['key4'] = 'value4'
print(my_dict)

# 딕셔너리의 모든 키 가져오기
print(my_dict.keys())

# 딕셔너리의 모든 값 가져오기
print(my_dict.values())

# 딕셔너리에 키(key) 'k1'이 있는지 확인
print('key1' in my_dict)	# True
print('key5' in my_dict)	# False

# 딕셔너리에 값(value) 'value1'이 있는지 확인
print('value1' in my_dict.values())

# 딕셔너리 키(key) 삭제
del my_dict['key3']
print(my_dict)

# 딕셔너리의 모든 요소 삭제
my_dict.clear()
print(my_dict)

  위 예제에서 in 연산자를 사용하여 딕셔너리 객체 내부에 해당 키가 있는지 확인하였습니다. 만약 5번째 줄의 코드와 같이 my_dict['key5'] 해당 키로 접근하면 에러가 발생하게 됩니다. 그렇다고 딕셔너리를 사용하여 코드를 작성 시 매번 예제와 같이 확인을 한다는 건 번거롭고 귀찮은 일이겠죠?

  이러한 번거로움을 해소하기 위해 get()과 setdefault() 메서드를 제공하고 있습니다.

  get() 메서드는 첫 번째 인자로 전달된 키(key)가 딕셔너리 내부에 있으면 해당 키(key)의 값(value)을 반환하고, 없으면 두 번째 인자로 전달된 값을 반환해 줍니다. 만약 두 번째 인자를 넣지 않으면 기본(default) 값인 "None"을 반환합니다.

my_dict = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}

return_value1 = my_dict.get('key5')
return_value2 = my_dict.get('key5', "해당 키가 없음.")

print(return_value1)	# None
print(return_value2)	# 해당 키가 없음.

  setdefault()는 딕셔너리 내부에 해당 키가 있다면 키의 값을 출력하고, 없다면 키와 값을 추가해 주는 메서드입니다.

my_dict = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}

return_value1 = my_dict.setdefault('key2', 'value5')
return_value2 = my_dict.setdefault('key4', 'value4')

print(return_value1)	# value2
print(return_value2)	# value4

   만약 딕셔너리를 사용한 코드에서 get(), setdefault() 메서드를 사용하지 않고 존재하지 않는 키에 접근하면 에러와 함께 프로그램은 종료됩니다. 그렇기 때문에 딕셔너리 사용 시 get(), setdefault() 메서드를 사용하여 접근하도록 하세요.

  위 예제들에서 사용된 메서드 외에도 다양한 메서드가 있으니 dir() 함수를 사용하여 확인해 보세요.

  그리고 딕셔너리의 update()와  setdefault() 메서드를 비교하여 사용해 보시기 바랍니다.^^

 

세트(set)

  파이썬은 수학의 집합을 자료형으로 제공하고 있으며, 이와 관련된 합집합, 교집합, 차집합 등의 연산도 가능합니다.

  집합의 선언(생성)은 딕셔너리와 같이 중괄호({ }) 또는 set()을 사용하여 객체를 생성합니다.

집합객체명 = {원소1,원소2,원소3...}
집합객체명 = set(시퀀스 객체)

집합의 특징 및 사용법

집합(set)은 원소의 중복을 허용하지 않는다.
집합(set)은 딕셔너리 자료형과 같이 순서가 없다.
다른 자료형과 달리 '객체명[]'로 특정 원소에 접근할 수 없다.
# 집합 객체 생성
empty_set = set()
list_set = set([1, 2, 3])	# {1,2,3}
tuple_set = set((1, 2, 3))	# {1,2,3}
str_set = set('apple')	# {'p', 'l', 'a', 'e'}

   위 예제에서 문자열 'apple'을 세트(set) 자료형으로 변환 후 출력하여 확인해 보면 중복된 데이터 삭제되고 문자의 순서가 없음을 확인할 수 있습니다.

# 집합 선언
set1 = {1, 2, 3}
set2 = {3, 4, 5}

# 합집합
union_set = set1 | set2	# set1.union(set2)

# 교집합
intersection_set = set1 & set2	# set1.intersection(set2)

# 차집합
difference_set = set1 - set2	# set1.difference(set2)

# 여집합
complement_set = set1 ^ set2	# set1.symmetric_difference(set2)

# 다양한 메소드
set1.add(4)
set1.remove(2)	# 삭제하려는 원소가 없으면 에러 발생
set1.discard(3)	# 삭제하려는 원소가 없어도 에러가 발생하지 않음
set1.pop()	# 임의의 원소를 제거하고 반환
set1.clear()	# 모든 원소를 제거

# 집합 관련 함수
is_subset = set1.issubset(set2)	# 부분 집합 여부를 판단
is_superset = set1.issuperset(set2) # 상위 집합 여부를 판단
is_disjoint = set1.isdisjoint(set2)	# 중복 원소의 여부를 판단.

파이썬의 맵핑형 자료형과 관련하여 기본적인 사용법에 대해서 알아보았습니다.

파이썬의 숫자, 논리, 시퀀스형 자료형 관련 내용은 이전 포스팅을 참고하세요.^^

 

 

 

 

 

 

 

 

 

 

반응형