AI학습 7

이유진·2024년 6월 27일

--10.딕셔너리.ipynb--

1. 딕셔너리(Dictionary)

  • 대응관계를 나타내는 자료형으로 key와 value라는 것을 한 쌍으로 갖는 형태
  • 하나의 딕셔너리의 key는 중복될 수 없음
  • 하나의 딕셔너리의 value는 중복될 수 있

1-1.딕셔너리 만들기

dic = {}
print(type(dic))

dict1 = {1:'이유진', 2:'이지민', 3:'용호중', 4:'안민혁', 5:'이세찬'}
print(dict1)

1-2.key를 통해 value찾기

dict1 = {1:'이유진', 2:'이지민', 3:'용호중', 4:'안민혁', 5:'이세찬'}
print(dict1[1]) # 딕셔너리를 출력할 때 []안에 키값을 넣어야한다.

키값을 같은 자료형으로 해줄 필요는 없다.

user1 = {'no':1, 'id':'dldbwls', 'name':'이유진', 4:22}

print(user1['no'])
print(user1['id'])
print(user1['name'])
print(user1[4])

1-3.데이터 추가 및 삭제

foods = {1:'rice'}
print(foods)

추가

데이터를 수정하는 문법을 사용해서 추가도 할 수 있다.

해당 딕셔너리에 없는 키 값을 저장공간으로서 사용한다면

키 값을 하나 만들어서 데이터를 저장한다.

foods[2] = 'chicken'
print(foods)

수정

foods[2] = '잡채'
print(foods)

삭제

del foods[2]
print(foods)

1-4.딕셔너리 함수

user1 = {'no':1, 'id':'dldbwls', 'name':'이유진', 4:22}

key() : key 리스트를 반환

print(user1.keys())

values() : value 리스트를 반환

print(user1.values())

items() : key와 value를 한 쌍으로 묶는 튜플을 반환

print(user1.items())

print('\n----- get -----')

get() : key를 이용해서 value를 반환

print(user1['id'])

print(user1['user_id']) # 해당 딕셔너리에 키 값이 없는 친구를 찾는다면 오류!

print(user1.get('name'))
print(user1.get('이름')) # 없는 키 값을 전달하면 에러가 아닌 None을 반환!
print(user1.get('이름', '해당 키값이 존재하지 않습니다.'))

print('\n----- in -----')

in : key가 딕셔너리 안에 있는지 검사. bool타입

print('name' in user1)
print('이름' in user1)

1-5.딕셔너리와 for

user1 = {'no':1, 'id':'dldbwls', 'name':'이유진', 4:22}

for i in user1:
print(i, end = ' ') # 키만 가지고 나온다.

print('\n')

for i in user1.keys():
print(i, end = ' ') # 키만 가지고 나온다.

print('\n')

for i in user1.values():
print(i, end = ' ') # 값만 가지고 나온다.

print('\n')

for i in user1:
print(user1[i], end = ' ')

print('\n')

for i in user1:
print(user1.get(i), end = ' ')

print('\n')

문제

아래와 값은 딕셔너리 자료에서 주민번호를 추출하여 성별을 알아내는 프로그램을 작성해보자.

user = {'name':'이유진,'hp':'010-4318-4738','ssn':'0208291914578}

user = {'name':'이유진', 'hp':'010-4318-4738', 'ssn':'0208291914578'}

if 'ssn' in user:
ssn = user.get('ssn')
if ssn[6] == '1' or ssn[6] == '3':
print('남자')
if ssn[6] == '2' or ssn[6] == '4':
print('여자')
else :
print('제대로 불러오지 못했어요.')
else:
print('ssn이 없습니다.')

--11.세트.ipynb--

1.Set

  • 수학의 집합과 비슷한 형태로 순서가 없기 때문에 어떤 값이 먼저 나올지 알 수 없고, 중복되는 데이터를 허용하지 않음
  • 딕셔너리처럼 중괄호를 사용해서 선언하지만 key는 존재하지 않고 value만 존재한

1-1.set만들기

값을 넣으며 만들기

set1 = {1,3,5,7}
print(type(set1))

리스트를 이용해서 만들기

set2 = set([11,22,33,44])
print(type(set2))
print(set2) # 순서는 신경쓰지 말기!!

set3 = {1,3,5,7,9,1,2,3,4,5,7,8,10,6,3,5,9,1,3}
print(set3) # 중복되는 데이터를 허용하지 않기때문에 중복된값은 하나로 생략해서 출력됨.

리스트의 중복 제거를 할 때 유용하게 사용할 수 있다!

numbers = [10,20,30,40,10,20,40,50,60,20,10,30,70,80,90]

numbers = set(numbers)
print(numbers)

numbers = list(set(numbers))
print(numbers)

numbers = sorted(list(set(numbers)))
print(numbers)

print(20 in numbers)

1-2.set함수

add() : set에 단일 데이터 추가

set1 = {22,33}
set1.add(11)
print(set1)

update() : set에 복수 데이터 한 번에 추가

set2 = {10,20,30}
#set2.update({66,20,77,88}) # set 전달
#set2.update([66,20,77,88]) # list 전달
set2.update((66,20,77,88)) # tuple 전달
print(set2)

remover() : set의 데이터를 제거 제거할 데이터가 없으면 에러

set2.remove(66)
print(set2)

discard() : set의 데이터를 제거, 제거할 데이터가 없어도 아무일도 일어나지 않는다.

set2.discard(30)
print(set2)
set2.discard(30)
print(set2)

1-3.set연산

nums1 = {11,22,33,44,55}
nums2 = {33,44,55,66,77}

합집합

result = nums1 | nums2
print(result)
result = nums1.union(nums2)
print(result)

교집합

result = nums1 & nums2
print(result)
result = nums1.intersection(nums2)
print(result)

차집합

result = nums1 - nums2
print(result)
result = nums1.difference(nums2)
print(result)

대칭 차집합 (합집합 - 교집합)

result = nums1 ^ nums2
print(result)
result = nums1.symmetric_difference(nums2)
print(result)

profile
독해지자

0개의 댓글