# 표현방법
{키1: 값1, 키2: 값2}
# 요소에 대한 접근
딕셔너리_이름[키] 또는 get(키)
{} # 빈 딕셔너리
{ "name" : "홍길동", "age" : 20,"취미" : ["영화 감상", "게임", "독서"] }
# 딕셔너리 요소 개수 확인
d = {}
d1 = {'a':1, 'b':2,'c':3 }
print(len({})) >> 0
print(len(d)) >> 0
print(len(d1)) >> 3
print(len({'a':1, 'b':2,'c':3 })) >> 3
#요소 접근
d = { "name" : "홍길동", "age" : 20, "취미" : ["영화 감상", "게임", "독서"] }
print(d["name"]) >> 홍길동
print(d["취미"]) >> ["영화 감상", "게임", "독서"]
print(d["이름"]) >> KeyError
print(d.get("name")) >> 홍길동
print(d.get("취미")) >> ["영화 감상", "게임", "독서"]
print(d.get("이름")) >> None
#키가 중복되면 나중에 나오는 값으로 지정
d = { "name" : "홍길동", "age" : 20, "취미" : ["영화 감상", "게임", "독서"],
"name" : "김길동" }
print(d["name"]) >> 김길동
d = {1:2, False: 20, (1,2): "튜플"}
d[1]= 3
d[False] = "불린 값"
d[(1,2)] = [1,2]
d['key'] = 'value'
print(d[1]) >> 2
print(d[False]) >> 불린 값
print(d[(1,2)]) >> [1,2]
print(d['key']) >> value
d = { 1 : 2, False : 20, (1, 2) : "튜플" }
d.update({1:3, False:"불린 값", (1,2):[1,2],"key":"value" })
print(d[1]) >> 3
print(d[False]) >> 불린 값
print(d[(1,2)]) >>[1,2]
print(d["key"]) >> value
d = {1:2, False:20, (1,2): '튜플'}
if 1 in d:
print(d[1])
else:
print("1은 d의 키가 아닙니다")
>> 2
d = {1:2, False:20, (1,2): '튜플'}
#1
for key in d:
print(f"{key}:{d[key]}")
#2
for key in d.keys():
print(f"{key}:{d[key]}")

person = {'name': 'John Doe', 'age': 28, 'hobby': 'Reading'}
for key, value in person.items():
print(f"{key}: {value}")

d = {1:2, False:20, (1,2): '튜플'}
for n in d.values():
print(n)
for k,v in d.items():
print(k, v)

d = {1:2, False:20, (1,2): '튜플'}
del(d[1])
print(d) >> {False:20, (1,2): '튜플'}
d = {1:2, False:20, (1,2): '튜플'}
d.clear()
print(d) >> {}
def store_in_dict():
name = input("이름을 입력하세요: ")
age = input("나이를 입력하세요: ")
person = {"name": name, "age":age}
print(person)
print(type(person))
store_in_dict()

def access_dict():
data = {'name': 'Alice', 'age':30}
key = input("찾고 싶은 키를 입력하세요: ")
try:
print(f"{key}의 값: {data[key]}")
except:
print(f"오류: {key}는 존재 않는 키입니다")
access_dict()

def solution(my_info):
my_info = {'name':'rokey', 'age':28, 'job':'developer'}
answer = my_info['age']
return answer
def solution(person):
person = {'name': 'Suji Na', 'age': 28}
person['hobby'] = "Reading"
answer = person['hobby']
returm answer
수학에서 집합을 나타내는 자료 구조
합집합, 교집합, 차집합 등의 연산 가능
순서가 없고 동일한 데이터가 두 개 이상 존재 할 수 없다
요소의 순서가 랜덤하게 출력
리스트는 포함 불가, 튜플은 가능
💡 키 값 없이 값만 존재 💡
💡 set()을 사용하면 리스트를 인수로 전달받을 수 있다 💡
# 집합을 리스트로 변환
lst = list(집합)
# 구성 방법
s = set()
set([1,2,3])
set("string")
list = [1, 2, 3, 4, 5]
s = set(list)
print(s) >> s = {1, 2, 3, 4, 5}
add() : 단이 요소 추가
update(): 여러 요소 추가
a = set([1,2,3])
a.add("string")
print(a) >> {1,2,3, 'string'}
a = set([1,2,3])
a.update("string")
print(a) >> {1, 2, 3, 't', 'n', 's', 'r', 'i', 'g'}
s = { 1, 2, 20, (1, 2), "문자열" }
if 1 in s:
print("1은 집합 s에 포함되어 있습니다")
else:
print("1은 집합 s의 요소가 아닙니다")
>> 1은 집합 s에 포함되어 있습니다
s1 = { 1, 2, 20, (1, 2), "문자열" }
s2 = { 1, 2, 3 }
ints = s1 & s2
print(ints)
ints2 = s1.intersection(s2)
print(ints2)
unions = s1 | s2
print(unions)
unions2 = s1.union(s2)
print(unions2)
diffs = s1 -s2 # s1에 포함된 s2 요소 제거
diffs2 = s1.difference(s2)

def create_and_print_set():
num = input("숫자를 공백으로 구분하여 입력하세요: ").split()
num_set = set(num)
print("생성된 집합: ", num_set)
create_and_print_set()

def update_dict():
data = {'name': 'Alice','age': 30}
key = input("추가할 키를 입력하세요: ")
value = input("추가할 값을 입력하세요")
data[key] = value
print("업데이트된 딕셔너리: ", data)
update_dict()

def filter_dict():
data = {'Alice':25, 'Bob':19, 'Cathy':34, 'Dan':19}
filtered_data = {k:v for k,v in data.items() if v >20}
print("값이 20보다 큰 아이템: ", filtered_data)
filter_dict()

def symmetric_difference_of_sets():
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
symmetric_difference = set1 ^ set2
print("두 집합의 대칭 차집합:", symmetric_difference)
symmetric_difference_of_sets()

books = {"파이썬 개론": ["홍길동"],
"Perfect C": ["김영수", "이동준"],
"컴퓨터 개론": ["최환수", "주용호", "박해성"]}
while True:
name = input("책 이름: ")
if name in books:
author = ', '.join(books[name])
print("저자: ", author)
break
else:
print("입력한 책에 대한 정보가 없습니다")
