[3주차] 자료구조

목해민·2023년 1월 20일

01. 자료구조란

여러 개의 데이터가 묶여있는 자료형을 컨테이너 자료형이라고 하고, 이러한 컨테이너 자료형의 데이터 구조를 자료구조라고 한다.

자료구조는 각각의 컨테이너 자료형에 따라서 차이가 있으며, 파이썬의 대표적인 컨테이너 자료형으로는 리스트(List), 튜플(Tuple), 딕셔너리(Dic), 셋트(Set)가 있다.

02. 리스트 (List)

리스트란?

  • 배열과 같이 여러 개의 데이터를 나열한 자료구조
  • '[]'를 이용해서 선언하고, 데이터 구분은 ','를 이용한다.
  • 숫자, 문자(열), 논리형 등 모든 기본 데이터를 같이 저장할 수 있다.
  • 리스트에 또 다른 컨테이너 자료형 데이터를 저장할 수도 있다.
    - ex. datas=[10,20,30,[40,60,70]]
  • 출력을 하게되면 대괄호와 같이 출력된다.

인덱스

  • 인덱스란, 아이템에 자동으로 부여되는 번호표이다.
  • 무조건 0부터 시작한다.
  • 리스트 아이템은 인덱스를 이용해서 조회 가능하다
# 5명의 학생 이름을 리스트에 저장하고 인덱스가 홀수인 학생과 짝수인 학생을 구분해서 인덱스와 학생 이름을 출력해보자

students = ['김성예', '신경도', '박기준', '최승철', '황동석']
print('--인덱스가 짝수인 학생--')
print('students[0] : {}'.format(students[0]))
print('students[2] : {}'.format(students[2]))
print('students[4] : {}'.format(students[4]))
print('--인덱스가 홀수인 학생--')
print('students[1] : {}'.format(students[1]))
print('students[3] : {}'.format(students[3]))

-----------------------------------------------
#for문을 이용하면

for i in range(5):
	if i % 2 ==0:
    	print('인덱스 짝수 : students[{}] : {}'.format(i, students[i]))
   	else:
    	print('인덱스 홀수 : students[{}] : {}'.format(i, students[i]))
        

리스트 길이

  • 리스트에 저장된 아이템 개수를 뜻한다.
  • len() 이용
# len()과 반복문을 이용하면 리스트의 아이템 조회가 가능하다.
# for문을 이용

for i in range(len(students)):
	print('i : {}'.format(i))
    print('students[{}] : {}'.format(i, students[i])
---------------------------------------------------
# while문을 이용

n = 0
sLength = len(students)
while n < sLength:
	print('n : {}'.format(n))
    print('students[{}] : {}'.format(n, students[n]))

i : 0
students[0] : 홍길동
i : 1
students[1] : 박찬호
i : 2
students[2] : 이용규
i : 3
students[3] : 박승철
i : 4
students[4] : 김지은

리스트와 for문

  • for문을 이용하면 리스트의 아이템을 자동으로 참조할 수 있다.
cars = ['그랜저', '소나타', '말리부', '카니발', '쏘렌토']

for i in range(len(cars)):
	print(cars[i])
-----------------------------
for car in cars:
	print(car)
    
>> 똑같은 결과가 나온다.

그랜저
소나타
말리부
카니발
쏘렌토

studentCnts = [[1,19],[2,20],[3,22],[4,18],[5,21]]
for classNo, cnt in studentCnts:
	print('{}학급 학생수: {}'.foramt(classNo, cnt)
    

1학급 학생수: 19
2학급 학생수: 20
3학급 학생수: 22
4학급 학생수: 18
5학급 학생수: 21

**for문을 이용하면, 리스트 내부에 또 다른 리스트의 아이템을 조회할 수도 있다.

# 리스트를 이용해서 학급별 학생 수와 전체 학생 수 그리고 평균 학생수를 출력  (for문 이용)
studentCnts = [[1,18],[2,19],[3,23],[4,21],[5,20],[6,22],[7,17]]
sum = 0
avg = 0
for classNo, cnt in studentCnts:
	print('{}학급 학생수: {}'.foramt(classNo, cnt)
    sum += cnt
    
print('전체 학생 수 : {}명'.format(sum))
print('평균 학생 수 : {}명'.format(sum / len(studnetCnts))
# for문과 if문을 이용해서 과락 과목 출력하기
minScore = 60
scores = [
	['국어',58],
    ['영어',77],
    ['수학',89],
    ['과학',99],
    ['국사',50]]
    
for subject, score in scores:
	if score < minScore:
    	print('과락 과목: {}, 점수 : {}'.format(subject,score))
-------------------------------------
# continue이용
for subject, score in scores:
	if score >= minScore: continue
    print('과락 과목: {}, 점수: {}'.format(subject, score))
# 리스트를 이용해서 학급 학생 수가 가장 작은 학급과 가장 많은 학급을 출력
studentCnts = [[1, 18], [2, 19], [3, 23], [4, 21], [5, 20], [6, 22], [7, 17]]
minclassNo = 0; maxclassNo = 0
minCnt = 0; maxCnt = 0
for classNo, cnt in studentCnts:
    if minCnt == 0 or minCnt > cnt:
        minclassNo = classNo
        minCnt = cnt

    if maxCnt < cnt:
        maxclassNo = classNo
        maxCnt = cnt

print('학생 수가 가장 적은 학급(학생수): {}학급({}명)'.format(minclassNo, minCnt))
print('학생 수가 가장 많은 학급(학생수): {}학급({}명)'.format(maxclassNo, maxCnt))

리스트와 while문

  • while문을 이용하면 다양한 방법으로 아이템 조회가 가능하다.
cars = ['그랜저', '소나타', '말리부', '카니발', '쏘렌토']

n = 0
while n < len(cars):
	print(cars[n])
    n+=1
------------------------
n = 0
flag = True
while flag:
	print(cars[n])
    n+=1
    
    if n == len(cars):
    	flag = False
------------------------
n = 0
while True:
	print(cars[n])
    n+=1
    
    if n == len(cars):
    	break

# 세 개 다 같은 결과가 나온다.

그랜저
소나타
말리부
카니발
쏘렌토

# 리스트를 이용해서 학급별 학생 수와 전체 학생 수 그리고 평균 학생수를 출력  (while문 이용)

studentCnts = [[1,18],[2,19],[3,23],[4,21],[5,20],[6,22],[7,17]]
sum = 0
avg = 0
n = 0
while n < len(studentCnts):
	classNo = studentCnts[n][0]
    cnt = studentCnts[n][1]
    print('{}학급 학생수 : {}명'.format(classNo, cnt))
    
    sum += cnt
    n += 1

print('전체 학생 수 : {}명'.format(sum))
print('평균 학생 수 : {}명'.format(sum / len(studnetCnts))

03. enumerate()함수

  • enumerate()함수를 이용하면 아이템을 열거할 수 있다.
sports = ['농구','수구','축구','마라톤','테니스']

for i in range(len(sports)):
	print('{} : {}'.format(i, sports[i]))
--------------------------------------------
for idx, value in enumerate(sports):
	print('{} : {}'.format(idx, value))

0 : 농구
1 : 수구
2 : 축구
3 : 마라톤
4 : 테니스

# 가장 좋아하는 스포츠가 몇 번째에 있는지 출력하는 프로그램을 만들어보자

sports = ['농구','수구','축구','마라톤','테니스']
favoriteSport = input('가장 좋아하는 스포츠 입력: ')

bestSportIdx = 0
for idx, value in enumerate(sports):
	if value == favoriteSport:
    	bestSportIdx = idx + 1
print('{}은 {}번째에 있습니다.'.format(favoriteSport, bestSportIdx))

04. 리스트에 아이템 추가,삭제

  • append()함수를 이용하면 마지막 인덱스에 아이템을 추가할 수 있다.
# 가족 구성원의 나이에 새로 태어난 동생을 리스트에 추가해보자

myFamilyAge = [['아빠',40],['엄마',38],['나',9]]
myFamilyAge.append(['동생',1])

for name, age in myFamilyAge:
	print('{}의 나이: {}'.format(name, age))
    

아빠의 나이: 40
엄마의 나이: 38
나의 나이: 9
동생의 나이: 1

  • insert() 함수를 추가하면 특정 위치(인덱스)에 아이템을 추가할 수 있다.
words = ['I','a','boy.']
words.insert(1, 'am')

for word in words:
	print('{}'.format(word), end='')
    

I am a boy.

# 오름차순으로 정렬되어 있는 숫자들에 사용자가 입력한 정수를 추가하는 프로그램을 만들어보자. (단, 추가 후에도 오름차순 정렬이 유지되어야 한다.)

numbers = [1,3,6,11,45,54,62,74,85]
inputNumber = int(input('숫자 입력: '))
insertIdx = 0

for idx, number in enumerate(numbers):
	print(idx, number)
    
    if insertIdx == 0 and inputNumber < number:
    	insertIdx = idx

numbers.insert(insertIdx, inputNumber)
print(numbers)

숫자 입력: 55
[1,3,6,11,45,54,55,62,74,85]

  • 마지막 인덱스 아이템 삭제
    pop()함수를 이용하면 마지막 인덱스에 해당하는 아이템을 삭제할 수 있다.
    pop(n)함수는 n인덱스에 해당하는 아이템을 삭제할 수 있다.
# 점수표에서 최고 및 최저 점수를 삭제해보자.

playerScore = [9.5, 8.9, 9.2,9.8, 8.8, 9.0]
print('playerScore : {}'.format(playerScore))

minScore =0; minIdx = 0
maxScore = 0; maxIdx = 0
for idx, score in enumerate(playerScore):
	if idx ==0 or minScore > score:
    	minIdx = idx
    	minScore = score

print('minScore : {}, minIdx : {}'.format(minScore, minIdx))

playerScore.pop(minIdx)
print('playerScore : {}'.format(playerScore))

for idx, score in enumerate(playerScore):
	if maxScore < score:
    	maxIdx = idx
    	maxScore = score

print('maxScore : {}, maxIdx : {}'.format(maxScore, maxIdx))

playerScore.pop(maxIdx)
print('playerScore : {}'.format(playerScore))
  • 특정 아이템 삭제
    remove()함수를 이용하면 특정 아이템을 삭제할 수 있다.
    remove()함수는 한 개의 아이템만 삭제 가능하다. 만약 삭제하려는 데이터가 2개 이상이라면 while문을 이용하자.
# 시험 과목표에서 사용자가 입력한 과목을 삭제하는 프로그램

subjects = ['국어', '영어', '수학', '과학', '국사']
print('시험 과목표 : {}'.format(subjects))

removeSubject = input('삭제 과목명 입력:')
while removeSubject in subjects:
	subjects.remove(removeSubject)
    
print('시험 과목표 : {}'.format(subjects))

05. 리스트 연결

  • extend()함수를 이용하면 리스트에 또 다른 리스트를 연결(확장)할 수 있다.
  • 덧셈 연산자를 이용해서 리스트를 연결할 수도 있다.
  • sort() 함수를 이용하면 아이템을 정렬할 수 있다.
    • sort() : 오름차순 정렬
    • sort(reverse = True) : 내림차순 정렬
playerScore = [9.5, 8.9, 9.2, 9.8, 8.8, 9.0]
print('playerScore: {}'.format(playerScore))

playerScore.sort()
print('playerScore:{}'.format(playerScore))
playerScore.pop(0)
playerScore.pop(len(playerScore) - 1)
print('playerScore: {}'.format(playerScore))

sum = 0
avg = 0
for score in palyerScore:
	sum += score
    
avg = sum / len(playerScore)

print('총점: %2f' %sum)
print('평점: %2f' %avg)

리스트 아이템 순서 뒤집기

  • reverse() 함수를 이용하면 아이템을 순서를 뒤집을 수 있다.

06. 리스트 슬라이싱

  • [n:m]을 이용하면 리스트에서 원하는 아이템만 뽑아낼 수 있다.
    - [n:m]을 이용하면 문자열 슬라이싱도 가능하다.
  • 슬라이싱할 때 단계를 설정할 수 있다.
  • 슬라이싱을 통해 아이템을 변경할 수 있다.
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print('students : {}'.format(students[2:4]))
print('students : {}'.format(students[:4]))
print('students : {}'.format(students[2:]))
print('students : {}'.format(students[2:-2]))
print('students : {}'.format(students[-5:-2]))

students : ['이용규', '강호동']
students : ['홍길동', '박찬호', '이용규', '강호동']
students : ['이용규', '강호동', '박승철', '김지은']
students : ['이용규', '강호동']
students : ['박찬호', '이용규', '강호동']

  • slice()함수를 이용해서 아이템을 슬라이싱할 수 있다.
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print('students: {}'.format(students))
print('students: {}'.format(students[2:4]))
print('students: {}'.format(students[:4]))
print('students: {}'.format(students[2:]))
print('students: {}'.format(students[2:-2]))
print('students: {}'.format(students[-5:-2]))

print('students: {}'.format(students[slice(2, 4)]))
print('students: {}'.format(students[slice(4)]))
print('students: {}'.format(students[slice(2, len(students))]))
print('students: {}'.format(students[slice(2, len(students)-2)]))
print('students: {}'.format(students[slice(len(students)-5, len(students)-2)]))

students: ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
students: ['이용규', '강호동']
students: ['홍길동', '박찬호', '이용규', '강호동']
students: ['이용규', '강호동', '박승철', '김지은']
students: ['이용규', '강호동']
students: ['박찬호', '이용규', '강호동']
students: ['이용규', '강호동']
students: ['홍길동', '박찬호', '이용규', '강호동']
students: ['이용규', '강호동', '박승철', '김지은']
students: ['이용규', '강호동']
students: ['박찬호', '이용규', '강호동']

07. 리스트의 나머지 기능들

리스트 곱셈 연산

리스트를 곱셈 연산하면 아이템이 반복된다.

아이템 위치 찾기

index(item) 함수를 item의 인덱스를 알아낼 수 있다.

# 1부터 10까지의 정수가 중복되지 않고 섞여 있을 때 행운의 숫자 7의 위치를 찾자

import random

sampleList = random.sample(range(1,11),10)

selectIdx = int(input('숫자 7의 위치 입력: '))
searchIdx = sampleList.index(7)

if serachIdx == selectIdx:
	print('빙고!!')
else:
	print('ㅜㅜ')
    
print('sampleList: {}'.format(sampleList))
print('serachIdx: {}'.foramt(searchIdx))

특정 아이템의 개수 알아내기, 특정 아이템 삭제

  • count()함수를 이용하면 특정 아이템의 개수를 알아낼 수 있다.
    - count('홍길동')
  • del 키워드를 이용하면 특정 아이템을 삭제할 수 있다.
    - ex. del students[1]
# 하루동안 헌혈을 진행한 후 혈액형 별 개수를 파악하는 프로그램

import random

types = ['A', 'B', 'AB', 'O']
todayData = []
typeCnt = []

for i in range(100):
    type = types[random.randrange(len(types))]
    todayData.append(type)

print('todayData : {}'.format(todayData))
print('todayData length : {}'.format(len(todayData)))

for type in types:
    print('{}형 \t : {}개'.format(type, todayData.count(type)))

08. 튜플 Tuple

  • 리스트와 비슷하지만, 아이템 변경이 불가하다.
    - 아이템 변경(수정, 삭제 등) 불가능
  • '()'를 이용해서 선언하고, 데이터 구분은 ','를 이용
    - 숫자, 문자(열), 논리형 등 모든 기본 데이터를 같이 저장할 수 있다.
    • 튜플에 또 다른 컨테이너 자료형 데이터를 저장할 수도 있다.

튜플 아이템 조회

인덱스

  • 튜플도 리스트와 마찬가지로 아이템에 자동으로 부여되는 번호표가 있다.
  • 튜플 아이템은 인덱스를 이용해서 조회 가능하다.

아이템 유/무 존재 파악

  • in, not in 키워드를 이용하면 존재 유/무를 알 수 있다.
studetnsTuple = ('홍길동', '박찬호', '이용규', '박승철', '김지은')

serachName = input('학생 이름 입력: ')
if searchName in studentsTuple:
	print('{} 학생은 우리반 학생입니다.'.format(searchName))
else:
	print('{} 학생은 우리반 학생이 아닙니다.'.format(searchName))

튜플 길이

  • 리스트와 마찬가지로, 튜플에 저장된 아이템 개수를 튜플 길이라고 한다.
  • len()과 반복문을 이용하면 튜플의 아이템 조회가 가능하다.

튜플 결합

  • 두 개의 튜플을 결합할 수 있다.
  • extend()함수는 사용할 수 없다. (리스트만 가능)
  • '+'를 이용해서 튜플을 결합한다.
myFavoriteNumbers = (1, 3, 5, 6, 7)
friendFavoriteNumbers = (2, 3, 5, 8, 10)

print('myFavoriteNumbers: {}'.format(myFavoriteNumbers))
print('friendFavoriteNumbers: {}'.format(friendFavoriteNumbers))

for number in friendFavoriteNumbers:
    if number not in myFavoriteNumbers:
        myFavoriteNumbers = myFavoriteNumbers + (number, )

print('myFavoriteNumbers: {}'.format(myFavoriteNumbers))

myFavoriteNumbers: (1, 3, 5, 6, 7)
friendFavoriteNumbers: (2, 3, 5, 8, 10)
myFavoriteNumbers: (1, 3, 5, 6, 7, 2, 8, 10)

튜플 슬라이싱

  • 리스트와 마찬가지로 [n:m]을 이용하면 리스트에서 원하는 아이템만 뽑아낼 수 있다.
  • 슬라이싱할 때 단계를 설정할 수 있다.
  • 튜플은 슬라이싱을 통해 아이템을 변경할 수 없다.
  • 리스트에 튜플 아이템으로 변경가능
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']

students[1:4] = ('park chanho', 'lee yonggyu', 'gang hodong')
print('students : {}'.format(students))
print(type(students))

students : ['홍길동', 'park chanho', 'lee yonggyu', 'gang hodong', '박승철', '김지은']
<class 'list'>

리스트와 튜플

차이점 :

  • 튜플은 리스트와 달리 아이템 추가, 변경, 삭제가 불가하다.
  • 튜플은 선언 시 괄호 생략이 가능하다.
    ex. students = '홍길동', '박찬호', '이용규', '강호동'

리스트와 튜플은 자료형 변환이 가능하다.

# 튜플을 이용한 점수표에서 최저 및 최고 점수를 삭제한 후 총점과 평균 출력

playerScore = (9.5, 8.9, 9.2, 9.8, 8.8, 9.0)
print('playerScore: {}'.format(playerScore))
print(type(playerScore))

# 튜플을 리스트로 자료형 변환
playerScore = list(playerScore)                 
print(type(playerScore))

playerScore.sort()
print('playerScore: {}'.format(playerScore))
playerScore.pop(0)
playerScore.pop(len(playerScore) - 1)

playerScore = tuple(playerScore)
print('playerScore: {}'.format(playerScore))
print(type(playerScore))

sum = 0
avg = 0
for score in playerScore:
    sum += score

avg = sum / len(playerScore)

print('총점: %.2f' % sum)
print('평점: %.2f' % avg)

playerScore: (9.5, 8.9, 9.2, 9.8, 8.8, 9.0)
<class 'tuple'>
<class 'list'>
playerScore: [8.8, 8.9, 9.0, 9.2, 9.5, 9.8]
playerScore: (8.9, 9.0, 9.2, 9.5)
<class 'tuple'>
총점: 36.60
평점: 9.15

튜플 아이템 정렬

  • 튜플은 수정이 불가능하기 때문에 리스트로 변환후 정렬해야 한다.
    • list() : 자료형 변환, sort(): 오름차순 정렬, tuple(): 자료형변환
    • sort() 함수를 이용하면 아이템을 정렬할 수 있다.
  • sorted()함수를 이용하면 튜플도 정렬할 수 있다.

튜플과 for문

  • for문을 이용하면 튜플의 아이템을 자동으로 참조할 수 있다.
  • for문을 이용하면, 튜플 내부에 또 다른 튜플의 아이템을 조회할 수도 있다.
# 튜플을 이용해서 학급별 학생 수와 전체 학생 수 그리고 평균 학생수를 출력

studentCnts = (1, 18), (2, 19), (3, 23), (4, 21), (5, 20), (6, 22), (7, 17)
sum = 0
avg = 0
for classNo, cnt in studentCnts:
    print('{}학급 학생수: {}명'.format(classNo, cnt))
    sum += cnt

print('전체 학생 수: {}명'.format(sum))
print('평균 학생 수: {}명'.format(sum / len(studentCnts)))

09. 딕셔너리 (Dictionary)

  • 딕셔너리란, key와 value를 이용해서 자료를 관리한다.
  • '{}'를 이용해서 선언하고, '키:값'의 형태로 아이템 정의
  • key와 value에는 숫자, 문자(열), 논리형 뿐만 아니라 컨테이너 자료형도 올 수 있다.
  • 단, key에 immutable값은 올 수 있지만 mutable값은 올 수 없다.

딕셔너리 조회

  • 딕셔너리는 key를 이용해서 value을 조회한다.
  • 존재하지 않는 키를 이용한 조회 시 에러가 발생한다.
  • get(key)를 이용해서 value를 조회할 수 있다.
    - ex. print('students.get(\'s1\'):{}'.format(students.get('s1')))
    - get()은 key가 없어도 에러가 발생하지 않는다.
students = {'s1':'홍길동', 's2':'박찬호', 's3':'이용규', 's4':'박승철', 's5':'김지은'}

print('students[\'s1\']:{}'.format(students['s1']))
print('students[\'s2\']:{}'.format(students['s2']))
print('students[\'s3\']:{}'.format(students['s3']))
print('students[\'s4\']:{}'.format(students['s4']))
print('students[\'s5\']:{}'.format(students['s5']))

students['s1']:홍길동
students['s2']:박찬호
students['s3']:이용규
students['s4']:박승철
students['s5']:김지은

딕셔너리 추가

  • '딕셔너리이름[key]=[value]' 형태로 아이템을 추가한다.
  • 추가하려는 키가 이미 있다면 기존 값이 변경된다.
myInfo = {}

myInfo['이름'] = '박경진'
myInfo['전공'] = 'computer'
myInfo['메일'] = 'jin@naver.com'
myInfo['학년'] = 3
myInfo['주소'] = '대한민국 서울'
myInfo['취미'] = ['요리', '여행']

print(f'myInfo : {myInfo}')

myInfo['메일'] = 'gyeongjin@naver.com'
print(f'myInfo : {myInfo}')

myInfo : {'이름': '박경진', '전공': 'computer', '메일': 'jin@naver.com', '학년': 3, '주소': '대한민국 서울', '취미': ['요리', '여행']}

myInfo : {'이름': '박경진', '전공': 'computer', '메일': 'gyeongjin@naver.com', '학년': 3, '주소': '대한민국 서울', '취미': ['요리', '여행']}

# 0부터 10까지의 각각의 정수에 대한 팩토리얼을 딕셔너리에 추가

factorialDic = {}
for i in range(11):
    if i == 0:
        factorialDic[i] = 1
    else:
        for j in range(1, (i+1)):
            factorialDic[i] = factorialDic[i-1] * j

print(f'factorialDic : {factorialDic}')

factorialDic : {0: 1, 1: 1, 2: 2, 3: 6, 4: 24, 5: 120, 6: 720, 7: 5040, 8: 40320, 9: 362880, 10: 3628800}

딕셔너리 수정

  • '딕셔너리이름[key]=[value]' 형태로 아이템을 수정한다.
# 하루에 몸무게와 신장이 각각 -0.3kg, +0.001m씩 변한다고 할 때, 30일 후의 몸무게와 신장의 값을 저장하고 BMI 값도 출력하는 프로그램을 만들어보자

myBodyInfo = {'이름':'gildong', '몸무게':83.0, '신장':1.8}
myBMI = myBodyInfo['몸무게'] / (myBodyInfo['신장'] ** 2)
print(f'myBodyInfo: {myBodyInfo}')
print(f'myBMI: {round(myBMI, 2)}')

date = 0
while True:
    date += 1
    myBodyInfo['몸무게'] = round((myBodyInfo['몸무게'] - 0.3), 2)
    print('몸무게: ', myBodyInfo['몸무게'])
    myBodyInfo['신장'] = round((myBodyInfo['신장'] + 0.001), 3)
    print('신장: ', myBodyInfo['신장'])
    myBMI = myBodyInfo['몸무게'] / (myBodyInfo['신장'] ** 2)

    if date >= 30:
            break

print(f'myBodyInfo: {myBodyInfo}')
print(f'myBMI: {round(myBMI, 2)}')

myBodyInfo: {'이름': 'gildong', '몸무게': 83.0, '신장': 1.8}
myBMI: 25.62
"---------------------------------------------------------"
myBodyInfo: {'이름': 'gildong', '몸무게': 74.0, '신장': 1.83}
myBMI: 22.1

keys()와 values() : key, value 조회

  • 전체 key와 value를 조회할 수 있다.
  • for문을 이용한 조회
  • 리스트(list())로 변환하기
# 학생의 시험 점수가 60점 미만이면 'F(재시험)'으로 값을 변경하는 코드를 keys()를 이용해서 작성

scores = {'kor':88, 'eng':55, 'mat':85, 'sci':57, 'his':82}
print(f'scores: {scores}')

minScore = 60
fStr = 'F(재시험)'
fDic = {}

for key in scores:
    if scores[key] < minScore:
        scores[key] = fStr
        fDic[key] = fStr

print(f'scores: {scores}')
print(f'fDic: {fDic}')

scores: {'kor': 88, 'eng': 55, 'mat': 85, 'sci': 57, 'his': 82}
scores: {'kor': 88, 'eng': 'F(재시험)', 'mat': 85, 'sci': 'F(재시험)', 'his': 82}
fDic: {'eng': 'F(재시험)', 'sci': 'F(재시험)'}

딕셔너리 삭제

  • del과 pop()을 이용해서 item 삭제
# 딕셔너리에 저장된 점수 중 최저 및 최고 점수를 삭제하는 프로그램

scores = {'score1':8.9, 'score2':8.1, 'score3':8.5, 'score4':9.8, 'score5':8.8}
minScore = 10; minScoreKey = ''
maxScore = 0; maxScoreKey = ''

for key in scores.keys():
    if scores[key] < minScore:
        minScore = scores[key]
        minScoreKey = key

    if scores[key] > maxScore:
        maxScore = scores[key]
        maxScoreKey = key

print('minScore : {}'.format(minScore))
print('minScoreKey : {}'.format(minScoreKey))

print('maxScore : {}'.format(maxScore))
print('maxScoreKey : {}'.format(maxScoreKey))

del scores[minScoreKey]
del scores[maxScoreKey]

print('scores : {}'.format(scores))

minScore : 8.1
minScoreKey : score2
maxScore : 9.8
maxScoreKey : score4
scores : {'score1': 8.9, 'score3': 8.5, 'score5': 8.8}

딕셔너리 유용한 기능

  • in, not in : 키 존재 유/무 판단
  • len() : 딕셔너리 길이(아이템 개수)를 알 수 있다.
  • clear() : 모든 아이템 삭제
profile
데이터분석가

0개의 댓글