자료구조

자료구조란?

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

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

    • 리스트 : [ ]로 묶어서 사용한다. 리스트안의 자료를 수정할 수 있다.
    • 튜플 : ( )로 묶어서 사용한다. 튜플안의 자료를 수정할 수 없다.
    • 딕셔너리 : { }로 key : vlaue를 한번에 묶어서 사용한다.
    • 셋트 : { }로 묶어서 사용한다. 중복 데이터를 사용할 수 없다.
student1 = '홍길동'
student2 = '박찬호'
student3 = '이용규'
student4 = '박승철'
student5 = '김지은'

students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
print(students)
print(type(students))

students = ('홍길동', '박찬호', '이용규', '박승철', '김지은')
print(students)
print(type(students))

scores = {'kor' : 95, 'eng' : 80, 'mat' : 100}
print(scores)
print(type(scores))

allSales = {'홍길동', '박찬호', '이용규', '박승철', '김지은'} # 중복된 데이터는 하나로 합쳐져서 출력된다.
print(allSales)
print(type(allSales))

  • 반복문을 활용하여 연속적으로 출력할 수 있다.

리스트

리스트(List)란?

  • 배열과 같이 여러 개의 데이터를 나열한 자료구조.

  • '[ ]'를 이용해서 선언하고, 데이터 구분은 ','를 이용한다.

# 리스트를 선언한다.
student = ['홍길동', '박찬호', '이용규', '박승철', '김지은'] # 데이터의 나열에 ,로 구분지어진다.
print(f'student : {student}') # 리스트로 감싸여진 데이터가 출력된다.
print(student)
# 문자, 숫자 구분없이 사용 가능하다.


인덱스

  • 인덱스란, 아이템에 자동으로 부여되는 번호표
student = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
for i in range(5):
    print(f'student[{i}] : {student[i]}')
print()
numbers = [10, '십', 30, 40, 50, 60]
for i in range(6):
    print(f'numbers[{i}] : {numbers[i]}')
print(type(numbers))
print(type(numbers[0]))
print(type(numbers[1]))

  • for문 반복문으로 순차적으로 출력이 가능하다.

리스트의 길이

아이템의 개수

  • 리스트 길이란, 리스트에 저장된 아이템 개수를 뜻한다.
    • 리스트로 만들어놓은 변수를 가지고 참조를하면 새로운 변수를 만들 수 있다.
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
print(students)

print(len(students)) # len() : 아이탬의 갯수를 출력할 수 있다.

for i in range(len(students)): # range()와 len()함수로 리스트의 갯수만큼 반복한다.
    print(f'students[{i}] : {students[i]}')

# len()함수는 아이탬의 갯수만 구할뿐 아니라 문자열의 길이도 구할 수 있다.
str = 'Hello word!!'
print(f'str의 길이 : {len(str)}')


리스트와 for문

for문을 이용한 내부 리스트 조회

  • for문을 이용하면 리스트의 아이템을 자동으로 참조할 수 있다.
studentCnts = [[1, 19], [2, 20], [3, 22], [4, 18], [5, 21]]

for classNo, cnt in studentCnts:
    print(f'{classNo}학급 학생수 : {cnt}')
    
# 리스트안의 리스트의 데이터인 [1, 19]의 1을 classNo가 가리키고 19를 cnt가 가리켜 출력된다.

  • for문과 if문을 이용해서 과락 과목 출력하기
minScore = 60
scores = [
    ['국어', 58], ['영어', 77], ['수학', 89], ['과학', 99], ['국사', 50]]
for subject, score in scores:
    if score < minScore:
        print(f'과락 과목 : {subject}, 점수 : {score}')
print()
# continue를 이용한 방법
for subject, score in scores:
    if score >= minScore: continue
    print(f'과락 과목 : {subject}, 점수 : {score}')


리스트와 while문

while문을 이용한 조회

  • while문을 이용하면 다양한 방법으로 아이템 조회가 가능하다.
# cars = ['그랜저', '소나타', '말리부', '카니발', '쏘렌토']
#
# n = 0
# while n < len(cars):
#     print(cars[n])
#     n += 1

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(f'{classNo}학급 학생수 : {cnt}')
    sum += cnt
    n += 1

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

  • while문과 if문을 이용해서 과락 과목 출력하기
minScore = 60
scores = [
    ['국어', 58], ['영어', 77], ['수학', 89], ['과학', 99], ['국사', 50]]
n = 0
while n < len(scores):
    if scores[n][1] < minScore:
        print(f'과락 과목 : {scores[n][0]}, 점수 : {scores[n][1]}')
    n += 1

print()
n = 0
while n < len(scores):
    if scores[n][1] >= minScore:
        n += 1
        continue
    print(f'과락 과목 : {scores[n][0]}, 점수 : {scores[n][1]}')
    n += 1

  • while문을 이용해서 학급 학생 수가 가장 작은 학급과 가장 많은 학급을 출력해보자.
studentCnts = [[1, 18], [2, 19], [3, 23], [4, 21], [5, 20], [6, 22], [7, 17]]
minClassNo = 0; maxClassNo = 0
minCnt = 0; maxCnt = 0
n = 0
while n < len(studentCnts):
    if minCnt == 0 or minCnt > studentCnts[n][1]:
        minClassNo = studentCnts[n][0]
        minCnt = studentCnts[n][1]

    if maxCnt < studentCnts[n][1]:
        maxClassNo = studentCnts[n][0]
        maxCnt = studentCnts[n][1]
    n += 1

print(f'학생 수가 가장 적은 학급(학생수) : {minClassNo}학급({minCnt})명')
print(f'학생 수가 가장 많은 학급(학생수) : {maxClassNo}학급({maxCnt})명')


enumerate()함수

  • enumerate()함수를 이용하면 아이템을 열거할 수 있다.
    • enumerate()함수 : 인덱스와 아이템을 조회할 수 있다.
  • 가장 좋아하는 스포츠가 몇 번재에 있는지 출력하는 프로그램을 만들어보자.
sports = ['농구', '수구', '축구', '마라톤', '테니스']
favoriteSport = input('가장 좋아하는 스포츠 입력 : ')

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

리스트에 아이템 추가하기

  • append()함수를 이용하면 마지막 인덱스에 아이템을 추가할 수 있다.
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
print(f'students : {students}')
print(f'students의 길이 : {len(students)}')
print(f'students의 마지막 인덱스 : {len(students) - 1}')
print('-' * 30)
students.append('강호동')
print(f'students : {students}')
print(f'students의 길이 : {len(students)}')
print(f'students의 마지막 인덱스 : {len(students) - 1}')

  • 가족 구성원의 나이가 아래와 같은 때 새로 태어난 동생을 리스트레 추가해보자.
myFamilyAge = [['아빠', 40], ['엄마', 38], ['나', 9]]
myFamilyAge.append(['동생', 1])

for idx, value in myFamilyAge:
    print(f'{idx}의 나이 : {value}')


특정 위치에 아이템 추가하기

  • insert()함수를 이용하면 특정 위치(인덱스)에 아이템을 추가할 수 있다.
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
print(f'students : {students}')
print(f'students의 길이 : {len(students)}')
print(f'students의 마지막 인덱스 : {len(students) - 1}')
print('-' * 30)
students.insert(3, '강호동')
print(f'students : {students}')
print(f'students의 길이 : {len(students)}')
print(f'students의 마지막 인덱스 : {len(students) - 1}')

  • insert()함수로 인해 박승철 부터는 뒤로 밀리고 강호동이 사이에 추가된것을 확인할 수 있다.

특정 위치에 아이템 삭제하기

  • pop()함수를 이용하면 마지막 인덱스에 해당하는 아이템을 삭제할 수 있다.
    • pop(n)함수를 n인덱스에 해당하는 아이템을 삭제 할 수 있다.
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은', '강호동']
print(f'students : {students}')
print(f'students의 길이 : {len(students)}')
print(f'students의 마지막 인덱스 : {len(students) - 1}')
print('-' * 30)
students.pop()
print(f'students : {students}')
print(f'students의 길이 : {len(students)}')
print(f'students의 마지막 인덱스 : {len(students) - 1}')
print('-' * 30)
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은', '강호동']
str = students.pop(3)
print(f'students : {students}')
print(f'students의 길이 : {len(students)}')
print(f'students의 마지막 인덱스 : {len(students) - 1}')
print('-' * 30)
print(f'str : {str}') # 삭제한 데이터를 변수에 집어넣어 출력할 수도 있다.


특정 아이템 삭제

  • remove()함수를 이용하면 특정 아이템을 삭제할 수 있다.
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print(students)

students.remove('박찬호')
print(students)

  • remove()는 한개의 아이템만 삭제 가능하므로 2개이상의 데이터를 삭제하기위해서 반복문을 사용하면된다.

리스트 연결

  • extend()함수를 이용하면 리스트에 또 다른 리스트를 연결(확장)할 수 있다.
group1 = ['홍길동', '박찬호', '이용규']
group2 = ['강호동', '박승철', '김지은']
print(f'group1 : {group1}')
print(f'group2 : {group2}')

# group1.extend(group2)
# print(f'group1 : {group1}')
# print(f'group2 : {group2}')

result = group1 + group2
print(f'result : {result}')
print(f'group1 : {group1}')
print(f'group2 : {group2}')


리스트 연결(확장)

  • sort()함수를 이용하면 아이템을 정렬할 수 있다.
    오름차순 정렬
    내림차순 정렬
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print(f'students : {students}')

students.sort(reverse=True) # 오름차순
print(f'students : {students}')

students.sort(reverse=False) # 내림차순
print(f'students : {students}')

숫자형으로도 정렬이 가능하다.


리스트 아이템 순서 뒤집기

  • reverse() 함수를 이용하면 아이템의 순서를 뒤집을 수 있다.
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print(students)
students.reverse()
print(students) # 순서를 반대로 뒤집었다.

numvers = [2, 50, 0.12, 1, 9, 7, 17, 35, 100, 3.14]
print(numvers)
numvers.reverse()
print(numvers)


리스트 슬라이싱

  • [n:m]을 이용하면 리스트에서 원하는 아이템만 뽑아낼 수 있다.
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print(f'students : {students}')
print(f'students : {students[2:4]}')
print(f'students : {students[:4]}')
print(f'students : {students[2:]}')
print(f'students : {students[2:-2]}')
print(f'students : {students[-5:-2]}')

numvers = [2, 50, 0.12, 1, 9, 7, 17, 35, 100, 3.14]
print(f'numvers : {numvers}')
print(f'numvers : {numvers[2:4]}')
print(f'numvers : {numvers[:4]}')
print(f'numvers : {numvers[2:]}')
print(f'numvers : {numvers[2:-2]}')
print(f'numvers : {numvers[-5:-2]}')


리스트의 나머지 기능들

리스트 곱셈

  • 리스트를 곱셈 연산하면 아이템이 반복된다.
students = ['홍길동', '박찬호', '이용규']
print(f'students : {students}')

studentsMul = students * 3
print(f'studentsMul : {studentsMul}')

numvers = [2, 50, 0.12, 1, 9]
print(f'numvers : {numvers}')

numversMul = numvers * 2
print(f'numversMul : {numversMul}')


index(item) 함수

  • index(item) 함수를 item의 인덱스를 알아낼 수 있다.
students = ['홍길동', '강호동', '박찬호', '이용규', '박승철', '강호동', '김지은']
print(f'students : {students}')

studentsIdx = students.index('강호동')
print(f'studentsIdx : {studentsIdx}')

studentsIdx = students.index('강호동', 2, 6) # 인덱스 2부터 인덱스 6앞까지의 범위중에서 강호동을 찾는 방법
print(f'studentsIdx : {studentsIdx}')

numvers = [2, 50, 0.12, 1, 9]
numversIdx = numvers.index(0.12)
print(f'numversIdx : {numversIdx}')


count() 함수

  • count() 함수를 이용하면 특정 아이템의 개수를 알아낼 수 있다.
students = ['홍길동', '강호동', '박찬호', '이용규', '박승철', '강호동', '김지은']
print(f'students : {students}')

studentsCnt = students.count('홍길동')
print(f'studentsCnt : {studentsCnt}')

studentsCnt = students.count('강호동')
print(f'studentsCnt : {studentsCnt}')

studentsCnt = students.count('김아무개')
print(f'studentsCnt : {studentsCnt}')


튜플

튜플이란?

  • 리스트는 자료를 수정이나 삭제가 가능하지만 튜플은 한번 선언한 후 엔 수정하거나 삭제 할 수 없다.
  • 리스트(List)와 비슷하지만 아이템 변경이 불가하다.
  • ()를 이용해서 선언하고, 데이터 구분은 ','를 이용한다.
    ex : strs = (10, '십', 30)
students = ('홍길동', '강호동', '박찬호', '이용규', '박승철', '강호동', '김지은')
print(f'students : {students}')
print(f'students type : {type(students)}')


튜플 아이템 조회

  • 튜플도 리스트와 마찬가지로 아이템에 자동으로 보여되는 번호표가 있다.
  • 튜플 아이템은 인덱스를 이용해서 조회가 가능하다.
students = ('홍길동', '박찬호', '이용규', '박승철', '김지은')
print(f'students[0] : {students[0]}')
print(f'students[1] : {students[1]}')
print(f'students[2] : {students[2]}')
print(f'students[3] : {students[3]}')
print(f'students[4] : {students[4]}')
# 문자열과 마찬가지로 숫자형도 가능하다.


in 과 not in 키워드

  • 아이템 존재 유무 판단하기
  • in, not in 키워드를 이용하면 아이템의 존재 유/무를 알 수 있다.
students = ('홍길동', '박찬호', '이용규', '박승철', '김지은')
searchName = input('학생 이름 입력 : ')
if searchName in students: # in 존재하면 True 아니면 Fales
    print(f'{searchName} 학생은 우리반 학생입니다.')
else:
    print(f'{searchName} 학생은 우리반 학생이 아닙니다.')

if searchName not in students:
    print(f'{searchName} 학생은 우리반 학생입니다.')
else:
    print(f'{searchName} 학생은 우리반 학생이 아닙니다.')


튜플의 길이

  • 리스트와 마찬가지로, 튜플에 저장된 아이템 개수를 튜플 길이라고 한다.
students = ('홍길동', '박찬호', '이용규', '박승철', '김지은', '강호동')
sLength = len(students)
print(f'sLength : {sLength}')

  • len()를 이용한 조회
  • len()과 반복문을 이용하면 튜플의 아이템 조회가 가능하다.
students = ('홍길동', '박찬호', '이용규', '박승철', '김지은', '강호동')
for i in range(len(students)):
    print(f'i : {i}')
    print(f'students[{i}] : {students[i]}')
print()
n = 0
sLength = len(students)
while n < sLength:
    print(f'n : {n}')
    print(f'students[{n}] : {students[n]}')
    n += 1


튜플 결합

  • 두개의 튜플을 합쳐서 새로운 튜플을 만드는것( + 연산자를 이용해서 결합할 수 있다.)
students1 = ('홍길동', '박찬호', '이용규')
students2 = ('박승철', '김지은', '강호동')

studentsTuple3 = students1 + students2
print(f'studentsTuple3 : {studentsTuple3}')


튜플 슬라이싱

  • 리스트와 마찬가지로 [n:m]을 이용하면 리스트에서 원하는 아이템만 뽑아낼 수 있다.
students = ('홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은')
print(f'students : {students}')
print(f'students[2:4] : {students[2:4]}')
print(f'students[:4] : {students[:4]}')
print(f'students[2:] : {students[2:]}')
print(f'students[2:-2] : {students[2:-2]}')

  • 리스트와 마찬가지로 튜플도 단계를 설정할 수 있다.
  • 튜플은 슬라이싱을 이용해서 아이템을 변경할 수 없다.
  • 리스트에 튜플 아이템으로 변경가능
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print(f'students : {students}')
students[1:4] = ('park chanho', 'lee youggyu', 'gang hodong')
print(f'students : {students}')
print(f'students type : {type(students)}')


리스트와 튜플의 차이점

  • 튜플은 리스트와 달리 아이템 추가, 변경, 삭제가 불가하다.
  • 튜플은 선언 시 괄호 생략이 가능하다.
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print(f'students : {students}')
print(f'students type : {type(students)}')

students = ('홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은')
print(f'students : {students}')
print(f'students type : {type(students)}')

students = '홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은'
print(f'students : {students}')
print(f'students type : {type(students)}')

  • 리스트와 튜플 변환
  • 리스트와 튜플은 자료형 변황이 가능하다.
students = '홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은'
students = list(students)
print(f'students : {students}')
print(f'students type : {type(students)}')
students = tuple(students)
print(f'students : {students}')
print(f'students type : {type(students)}')


튜플의 정렬

  • 튜플은 수정이 불가하기 때문에 리스트로 변환 후 정렬하자.

  • 기본적으로 정렬을 할땐 리스트로 변환 후 sort() 함수를 이용하여 정렬할 수 있다.

  • ex : list() -> sort(reverse=True) -> tuple() ---> 내림차순 정렬

  • sorted() 함수를 이용하면 튜플도 정렬할 수 있다.

  • sorted() ---> 오름차순 정렬 하지만 정렬 후에는 list형으로 변환된다.

  • ex : sort(reverse=True) --> 내림차순 정렬, sort(reverse=False) --> 올림차순 정렬(기본적으로 False가 입력된다.)

students = ('홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은')
print(f'students : {students}')
print(f'students type : {type(students)}')

students = list(students)
students.sort(reverse=True)
print(f'students : {students}')
print(f'students type : {type(students)}')

students = tuple(students)
print(f'students : {students}')
print(f'students type : {type(students)}')

students = ('홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은')
sortedstudents = sorted(students) # 튜플의 정렬 함수인 sorted() 함수를 이용할땐 자료형을 변환할 때 처럼 감싸서 사용해야한다.
print(f'sortedstudents : {sortedstudents}')
print(f'sortedstudents type : {type(sortedstudents)}')
# 튜플에서 정렬이 끝난 후 리스트 타입으로 변환 된것을 확인할 수 있다.


튜플과 for문

  • for문을 이용하면 튜플의 아이템을 자동으로 참조할 수 있다.(조회할 수 있다.)
cars = '그랜저', '소나타', '말리부', '카니발', '쏘렌토' # ()를 사용하지않아도 튜플형으로 선언할 수 있다.
for i in range(len(cars)):
    print(cars[i])
print()
for car in cars:
    print(car)

  • for문을 이용한 내부 튜플 조회
  • for문을 이용하면 튜플의 아이템을 자동으로 참조할 수 있다.
studentCnts = ((1, 19),(2, 20),(3, 22),(4, 18),(5, 21))
for i in range(len(studentCnts)):
    print(f'{studentCnts[i][0]}학급 학생수 : {studentCnts[i][1]}')
print()
for classNo, cnt in studentCnts:
    print(f'{classNo}학급 학생수 : {cnt}')

  • for문과 if문을 이용해서 과락 과목 출력하기
minScore = 60

scores = (('국어', 58), ('영어', 77), ('수학', 89), ('과학', 99), ('국사', 50))
for item in scores:
    if item[1] < minScore:
        print(f'과락 과목 : {item[0]}, 점수 : {item[1]}')
print()
for subject, score in scores:
    if score < minScore:
        print(f'과락 과목 : {subject}, 점수 : {score}')
print()
# continue 이용
for subject, score in scores:
    if score >= minScore: continue
    print(f'과락 과목 : {subject}, 점수 : {score}')


튜플과 while문

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

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

  • while문을 이용하면 다양한 방법으로 아이템 조회가 가능하다.
studentCnts = ((1, 19),(2, 20),(3, 22),(4, 18),(5, 21))
n = 0
while n < len(studentCnts):
    print(f'{studentCnts[n][0]}학급 학생수 : {studentCnts[n][1]}')
    n += 1

while문과 if문

  • whihle문과 if문을 이용해서 과락 과목 출력하기
minScore = 60

scores = (('국어', 58), ('영어', 77), ('수학', 89), ('과학', 99), ('국사', 50))
n = 0
while n < len(scores):
    if scores[n][1] < minScore:
        print(f'과락 과목 : {scores[n][0]}, 점수 : {scores[n][1]}')
    n += 1
while n < len(scores):
    if scores[n][1] > minScore:
        n += 1
        continue
    print(f'과락 과목 : {scores[n][0]}, 점수 : {scores[n][1]}')
    n += 1


딕셔너리(Dictionary)

딕셔너리란?

  • 키(key)와 값(value)를 이용해서 자료를 관리한다.
    딕셔너리 = 키 : 값 로 표기된다.
  • 키는 중복될 수 없지만 값은 중복도 상관없이 사용가능하다.
  • 딕셔너리 선언 : '{}'를 이용해서 선언하고, '키:값'의 형태로 아이템을 정의한다.
students = {'s1' : '홍길동', 's2' : '박찬호', 's3' : '이용규', 's4' : '박승철', 's5' : '김지은'}

memInfo = {'이름' : '홍길동', '메일' : 'gildong@gmail.com', '학년' : 3, '취미' : ['농구', '게임']}
students1 = {'이름' : '홍길동', '메일' : 'gildong@gmail.com', '학년' : 3}
students2 = {'이름' : '박찬호', '메일' : 'chanho@gmail.com', '학년' : 2}
students3 = {'이름' : '이용규', '메일' : 'yonggyu@gmail.com', '학년' : 1}

studentsInfo = {1 : students1, 2 : students2 , 3 : students3}
print(studentsInfo)

  • key에는 변경이 불가능한 데이터만 올수 있다.

딕셔너리 조회

  • 딕셔너리는 키(key)를 이용해서 값(value)을 조회한다.
students = {'s1' : '홍길동', 's2' : '박찬호', 's3' : '이용규', 's4' : ['박승철', '이용규'], 's5' : '김지은'}

print(f'students[\'s1\']의 값은 : {students["s1"]}')
print(f'students[\'s2\']의 값은 : {students["s2"]}')
print(f'students[\'s3\']의 값은 : {students["s3"]}')
print(f'students[\'s4\']의 값은 : {students["s4"]}')
print(f'students[\'s4\']의 값은 : {students["s4"][0]}')
print(f'students[\'s4\']의 값은 : {students["s4"][1]}')
# 값안에 리스트도 입력이 가능하다.
# 존재하지않을시 키(key)에러가 발생한다.

# get()함수를 이용한 조회
# get(ket)를 이용해서 값(value)을 조회 할 수 있다. (get()은 key가 없어도 에러가 발생하지 않는다.)
print(students.get('s7'))

  • get(ket)를 이용해서 값(value)을 조회 할 수 있다. (get()은 key가 없어도 에러가 발생하지 않는다.)

딕셔너리 추가

  • 딕셔너리 이름[키(key)]:값(value) 형태로 아이템을 추가한다.
myInfo = {}
myInfo['이름'] = '박경진'
myInfo['전공'] = 'computer'
myInfo['메일'] = 'jin@gmail.com'
myInfo['학년'] = 3
myInfo['주소'] = 'korea seoul'
myInfo['취미'] = ['수영', '여행']

print(myInfo)

myInfo['메일'] = 'jin@naver.com'
# 같은 키에 다른 값을 넣으면 가장 최근에 넣은 값으로 변경된다.
print(myInfo)
# 변경된 값을 확인 할 수 있다.


딕셔너리 수정

  • 딕셔너리 이름[키(key)]:값(value) 형태로 아이템을 수정한다.
myInfo = {}
myInfo['이름'] = '박경진'
myInfo['전공'] = 'computer'
myInfo['메일'] = 'jin@gmail.com'
myInfo['학년'] = 3
myInfo['주소'] = 'korea seoul'
myInfo['취미'] = ['수영', '여행']
print(myInfo)
myInfo['전공'] = 'sports'
myInfo['학년'] = 4
print(myInfo)


kets()와 values()

  • 전체 키(key)와 값(value)를 조회할 수 있다.
memInfo = {'이름' : '홍길동', '메일' : 'gildong@gmail.com', '학년' : 3, '취미' : ['농구', '게임']}

ks = memInfo.keys()
print(f'ks : {ks}')
print(f'ks type : {type(ks)}')

vs = memInfo.values()
print(f'vs : {vs}')
print(f'vs type : {type(vs)}')

items = memInfo.items()
print(f'items : {items}')
print(f'items type : {type(items)}') 
# items()는 튜플로 반환한다.


딕셔너리 삭제

del

  • del과 key를 이용한 item삭제
memInfo = {'이름' : '홍길동', '메일' : 'gildong@gmail.com', '학년' : 3, '취미' : ['농구', '게임']}
print(f'memInfo : {memInfo}')
del memInfo['메일']
print(f'memInfo : {memInfo}')

pop()

  • pop()와 key를 이용한 item삭제
memInfo = {'이름' : '홍길동', '메일' : 'gildong@gmail.com', '학년' : 3, '취미' : ['농구', '게임']}
print(f'memInfo : {memInfo}')
memInfoValue = memInfo.pop('메일')
print(f'memInfo : {memInfo}')
print(f'memInfoValue : {memInfoValue}')
print(f'memInfoValue type : {type(memInfoValue)}')
memInfoValue = memInfo.pop('취미')
print(f'memInfo : {memInfo}')
print(f'memInfoValue : {memInfoValue}')
print(f'memInfoValue type : {type(memInfoValue)}')

  • 하나 이상의 데이터가 들어가면 list가 되는걸 확인할 수 있다.

딕셔너리의 유용한 기능들

in, not in

  • 키(key) 존재 유/무 판단 한다.
memInfo = {'이름' : '홍길동', '메일' : 'gildong@gmail.com', '학년' : 3, '취미' : ['농구', '게임']}

print('이름' in memInfo)
print('메일' in memInfo)
print('학년' in memInfo)
print('취미' in memInfo)
print()
print('name' not in memInfo)
print('mail' not in memInfo)
print('grade' not in memInfo)
print('hoppy' not in memInfo)

len()

  • 딕셔너리 길이(아이템 개수)를 알 수 있다.
memInfo = {'이름' : '홍길동', '메일' : 'gildong@gmail.com', '학년' : 3, '취미' : ['농구', '게임']}
print(f'len(memInfo) : {len(memInfo)}')

  • 아이템의 개수인 4가나오는걸 확인할 수 있다.

clear()

  • 모든 아이템을 삭제 한다.
memInfo = {'이름' : '홍길동', '메일' : 'gildong@gmail.com', '학년' : 3, '취미' : ['농구', '게임']}
print(f'memInfo : {memInfo}')
print(f'len(memInfo) : {len(memInfo)}')
memInfo.clear() # 딕셔너리안에있는 모든 아이템을 지운다.
print(f'memInfo : {memInfo}')
print(f'len(memInfo) : {len(memInfo)}')

profile
코딩공부중

0개의 댓글