강의실/컴퓨팅사고 with python
Ch10_딕셔너리,집합,파일처리 (1)
jsBae
2025. 5. 14. 23:29
Chapter10_딕셔너리, 집합, 파일처리
참고.data types(list,tuple,set,dictionary)
파이썬은 여러 가지 데이터 타입을 지원하여 다양한 종류의 데이터를 처리할 수 있습니다.
- 정수형(int): 정수 값을 나타내는 데이터 타입입니다. 양수, 음수, 0을 포함한 모든 정수 값을 표현할 수 있습니다.
- 부동소수점형(float): 실수 값을 나타내는 데이터 타입으로, 소수점을 가지는 수를 표현할 수 있습니다. 부동소수점 연산에는 근사치가 포함될 수 있습니다.
- 문자열(str): 문자의 시퀀스로 텍스트 데이터를 나타내는 데이터 타입입니다. 작은 따옴표(')나 큰 따옴표(")로 감싸서 생성합니다.
- 불리언(bool): 참(True) 또는 거짓(False) 값을 가지는 데이터 타입으로, 조건문과 논리 연산에 사용됩니다.
- 리스트(list): 여러 값을 순차적으로 저장하는 데이터 타입입니다. 서로 다른 타입의 요소들을 포함할 수 있으며, 대괄호([])로 생성하고 각 요소는 쉼표로 구분합니다.
- 튜플(tuple): 리스트와 유사하지만 변경할 수 없는(immutable) 데이터 타입입니다. *소괄호(())로 생성하며, *요소들은 쉼표로 구분됩니다.
- 딕셔너리(dict): 키(key)와 값(value)의 쌍으로 데이터를 저장하는 데이터 타입입니다. 중괄호({})로 생성하며, 각 쌍은 '키: 값' 형태로 구성됩니다.
- 세트(set): 중복되지 않은 값을 가지는 데이터 타입으로, 중괄호({})나 set() 함수로 생성합니다. 순서가 없기 때문에 인덱스로 접근할 수 없습니다.
- ** NoneType(None)**: 값이 없음을 나타내는 데이터 타입으로, 주로 변수에 초기값을 할당하지 않거나 함수의 반환 값이 없는 경우에 사용됩니다.
이외에도 컴플렉스(complex) 타입, 바이트(bytes) 및 바이트 배열(bytearray) 등 다양한 데이터 타입이 있습니다. 파이썬은 동적 타이핑(dynamic typing) 언어로, 변수의 타입은 할당될 때 자동으로 결정됩니다.
01.딕셔너리(dictionary)
Dictionary(사전)은 파이썬에서 매우 유용한 데이터 유형 중 하나로, 키(Key)와 값(Value)으로 구성되는 자료구조입니다.
- 사전은 키와 값의 쌍을 저장하며, 키를 통해 값을 빠르게 검색하고 관리할 수 있습니다.
- 사전은 중괄호 {}를 사용하여 생성하며, 각 키와 값은 콜론(:)으로 구분되고, 쌍들은 쉼표로 구분됩니다.
1-1.생성 :Key – Value 쌍으로 이루어진 자료형 { : }
딕셔너리명 = {"키1":"값1", "키1":값2, …}
# 영한 사전
eng_to_kor = {
'apple': '사과',
'banana': '바나나',
'cherry': '체리',
'grape': '포도'
}
print(eng_to_kor)
print(type(eng_to_kor))
# 국가별 인구수 사전
population = {
'Korea': 51780579,
'USA': 331002651,
'China': 1439323776,
'India': 1380004385
}
#Key : 변수 또는 튜플 Value : 거의 모든 자료형 가능
b = {(1, '가'):["리","스","트"],}
b[(1,"가")]
연습1
한 사람의 인적사항을 기록할 예정이다. key 값으로는 ‘name’, ‘phone’, ‘job’, ‘address’를 가지는 딕셔너리를 생성해보자.
std_info = {
'name': 'John Doe',
'age': 18,
'grade': 'A'
}
print(std_info)
{'name': 'John Doe', 'age': 18, 'grade': 'A'}
연습2
3명의 학생들이 다섯 문제의 시험을 보았다. Key로는 사람 이름을, 적어낸 5개의 답을 리스트를 값으로 하는 딕셔너리를 제작하라.
# 학생들의 답안 딕셔너리 생성
student_answers = {
'Alice': ['A', 'B', 'C', 'D', 'E'],
'Bob': ['B', 'C', 'D', 'E', 'A'],
'Charlie': ['C', 'D', 'E', 'A', 'B']
}
# 학생들의 답안 출력
for student, answers in student_answers.items():
print(f"{student}'s answers:", answers)
Alice's answers: ['A', 'B', 'C', 'D', 'E']
Bob's answers: ['B', 'C', 'D', 'E', 'A']
Charlie's answers: ['C', 'D', 'E', 'A', 'B']
02.딕셔너리 추가하기
- 해당 키를 입력하여 변수명을 입력하면 된다.{1: 'a'} 딕셔너리에 a[2] = 'b'와 같이 입력하면 딕셔너리 a에 Key와 Value가 각각 2와 'b'인 {2: 'b'} 딕셔너리 쌍이 추가된다.
a = {1:'a'}
a[2] = 'b'
print(a)
a = {1:'a'}
a[2] = "b"
a[3] = [5,6,7]
a['pay'] = 2000
print(a)
03.딕셔너리 삭제하기
- del 키워드 사용
- 예:
del a[1]
a = {1:'a',2:'b', 'pay':2000, 3:[5,6,7]}
del a[1] #첫 항 삭제
print(a)
04.딕셔너리 읽기 : key를 사용해서 Value 얻기
- 리스트나 튜플, 문자열은 요솟값을 얻고자 할 때 인덱싱이나 슬라이싱 기법 중 하나를 사용했다. *하지만 딕셔너리는 단 1가지 방법뿐이다. *
- 그것은 바로 Key를 사용해서 Value를 구하는 방법이다.예에서 'pey'라는 Key의 Value를 얻기 위해 grade['pey']를 사용한 것처럼 어떤 Key의 Value를 얻기 위해서는 '딕셔너리_변수_이름[Key]'를 사용해야 한다.
'딕셔너리_변수_이름[Key]'
grade = {'철수': 10, '영희': 99}
grade['철수']
a = {1:'a', 2:'b'}
a[1]
먼저 a 변수에 {1: 'a', 2: 'b'} 딕셔너리를 대입하였다.
위 예에서 볼 수 있듯이 a[1]은 'a' 값을 리턴한다.
- 여기에서 a[1]이 의미하는 것은 리스트나 튜플의 a[1]과는 전혀 다르다.
- 딕셔너리 변수에서 [] 안의 숫자 1은 두 번째 요소를 나타내는 것이 아니라 Key에 해당하는 1을 나타낸다.
- 앞에서도 말했듯이 딕셔너리는 리스트나 튜플에 있는 인덱싱 방법을 적용할 수 없다. 따라서 a[1]은 딕셔너리 {1: 'a', 2: 'b'}에서 Key가 1인 것의 Value인 'a'를 리턴한다. a[2] 역시 마찬가지이다.
05.딕셔너리 관련 함수
.keys() : key값으로 리스트 만들기
- a.keys()는 딕셔너리 a의 Key만을 모아 dict_keys 객체를 리턴한다.
a = {1:'a',2:'b', 'pay':2000, 3:[5,6,7]}
a.keys()
dict_keys([1, 2, 'pay', 3])
.values() : value 생성
- Key를 얻는 것과 마찬가지 방법으로 Value만 얻고 싶다면 values 함수를 사용하면 된다. values 함수를 호출하면 dict_values 객체를 리턴한다.
a.values()
dict_values(['a', 'b', 2000, [5, 6, 7]])
items():Key, Value 쌍 얻기
- items 함수는 Key와 Value의 쌍을 튜플로 묶은 값을 dict_items 객체로 리턴한다.
a.items()
dict_items([(1, 'a'), (2, 'b'), ('pay', 2000), (3, [5, 6, 7])])
clear() : key:value 쌍 모두 지우기
- clear 함수는 딕셔너리 안의 모든 요소를 삭제한다.빈 리스트를 [], 빈 튜플을 ()로 표현하는 것과 마찬가지로 빈 딕셔너리도 {}로 표현한다.
a.clear()
in : 해당 Key가 딕셔너리 안에 있는지 조사하기
a = {'name':'pey', 'phone':'010-9999-1234', 'birth': '1118'}
'name' in a
06.딕셔너리와 반복문
a = {1:'a',2:'b', 'pay':2000, 3:[5,6,7]}
for i in a.keys():
print(i)
1
2
pay
3
for i in a.values():
print(i)
a
b
2000
[5, 6, 7]
07.딕셔너리 만들 때 주의 사항
- 딕셔너리에는 동일한 Key가 중복으로 존재할 수 없다.
- 딕셔너리에서 Key는 고유한 값이므로 중복되는 Key 값을 설정해 놓으면 하나를 제외한 나머지 것들이 모두 무시된다는 점에 주의해야 한다.
- 다음 예에서 볼 수 있듯이 동일한 Key가 2개 존재할 경우, 1: 'a' 쌍이 무시된다.
- 또 1가지 주의해야 할 점은 Key에 리스트는 쓸 수 없다는 것이다. 하지만 튜플은 Key로 쓸 수 있다.
- 딕셔너리의 Key로 쓸 수 있느냐, 없느냐는 Key가 변하는(mutable) 값인지, 변하지 않는(immutable) 값인지에 달려 있다. 리스트는 그 값이 변할 수 있기 때문에 Key로 쓸 수 없다. 다음 예처럼 리스트를 Key로 설정하면 리스트를 키 값으로 사용할 수 없다는 오류가 발생한다.
- 단, Value에는 변하는 값이든, 변하지 않는 값이든 아무 값이나 넣을 수 있다.
#딕셔너리에는 동일한 Key가 중복으로 존재할 수 없다.
a = {1:'a',1:'b'}
a
{1: 'b'}
# Key에 리스트는 쓸 수 없다
a = {[1,2] : 'hi'}
연습문제
01
{"강감찬":"귀주대첩", "을지문덕":"살수대첩", "세종대왕":"집현전"}라는 딕셔너리를 만들고 여기에 {"서희":"강동6주"}를 추가하여라.
bigwar = {
"강감찬":"귀주대첩",
"을지문덕":"살수대첩",
"세종대왕":"집현전"
}
bigwar
bigwar['서희'] = '강동6주'
print(bigwar)
02
위의 딕셔너리에서 Key가 "세종대왕"인 것의 Value를 "한글"로 수정하여라.
bigwar['세종대왕'] = '한글'
print(bigwar)
03
"을지문덕"이라는 Key가 존재하는지 확인하고 있다면 삭제하라.
if '을지문덕' in bigwar:
del bigwar['을지문덕']
print(bigwar)
tip : 리스트를 딕셔너리로 만들기
number = [87, 98, 99]
a = dict.fromkeys(number) #dict.fromkeys(number)를 사용하여 number 리스트의 각 요소를 키로 하는 빈 딕셔너리를 생성
print(a)
#zip 함수를 사용하여 딕셔너리 생성:
keys = ["one", "two", "three"]
values = [1, 2, 3]
dictionary = dict(zip(keys, values))
print(dictionary)
연습1 (enumerate함수를 활용한 번호순 디렉토리 생성)
- 빈 디렉토리 생성
- 반복문과 enumerate(리스트명, 시작번호)을 활용
- 순서를 키로 사용하여 keys, values 딕션너리 추가
enumerate() : 반복 가능한 객체(예: 리스트, 튜플, 문자열 등)를 인덱스와 함께 순회할 수 있게 해주는 함수.
start 매개변수는 인덱스의 시작 번호를 지정
names = ["Alice", "Bob", "Charlie"]
name_dict = {} # 빈 딕셔너리 생성
for index, name in enumerate(names, start=1):
name_dict[index] = name # 순서를 키로 사용하여 딕셔너리에 추가
print(name_dict)
연습2. 리스트의 이름의 글자수를 키값으로 하는 딕션너리 생성하기
names = ["Alice", "Bob", "Charlie"]
name_dict = {} # 빈 딕셔너리 생성
for name in names:
name_dict[len(name)] = name # 리스트 요소의 길이를 값으로 활용하여 딕셔너리에 추가
print(name_dict)
딕셔너리 주요 연산
연산 | 예시 | 설명 |
값 조회 | student["이름"] | 키를 통해 값 접근 |
키 존재 확인 | "이름" in student | True / False 반환 |
값 수정 | student["나이"] = 21 | 값 변경 |
항목 추가 | student["학년"] = 3 | 새 키-값 추가 |
항목 삭제 | del student["학과"] | 해당 키-값 삭제 |
전체 키 조회 | student.keys() | dict_keys 객체 반환 |
전체 값 조회 | student.values() | dict_values 객체 반환 |
전체 쌍 조회 | student.items() | dict_items 객체 반환 |
비우기 | student.clear() | 모든 항목 삭제 |
# 딕셔너리 생성
fruit_price = {"사과": 1000, "바나나": 800, "포도": 1200}
# 값 조회
print(fruit_price["바나나"]) # 800
# 값 수정
fruit_price["사과"] = 1100
# 키 존재 여부 확인
if "포도" in fruit_price:
print("포도는 가격 정보가 있습니다.")
# 딕셔너리 순회
for fruit, price in fruit_price.items():
print(f"{fruit}의 가격은 {price}원입니다.")
✅ 과제 1. 나의 정보 딕셔너리 만들기
다음 정보를 담은 딕셔너리를 만들고, 각 값을 출력하시오.
- 이름: 홍길동
- 나이: 21
- 전공: 소프트웨어공학
# 출력 예시:
이름: 홍길동
나이: 21
전공: 소프트웨어공학
728x90
반응형