# 프로그램 목적: 셋(set)과 딕셔너리의 구분
# 주의) 리스트:[] vs 딕셔너리/셋:{} vs 튜플:()

# 1) 딕셔너리(Dictionary)
c = {'color': 'red', 'age': 7}
print(c, type(c))
k = dict(color='red', age=7)  # dict(): 딕셔너리를 생성하는 라이브러리 함수
print(k, type(k))
# k = dict('color'='red', 'age'=7)  # 이렇게 쓰면 문법적 오류
# 주의) 함수와 직접넣는 것의 형태 다름에 유의!

# 2) 셋(Set) -> 딕셔너리와 셋은 형태적으로 유사하다!
# 딕셔너리는 {key: value}의 형태이나 셋은 {e1, e2, e3, ... }의 형태이다!
# 특징) 셋은 자동 중복제거 기능을 지원하고 순서가 임의적이다
b = {1, 2, 1, 2, 3}
print(b, type(b))  # 결과: 1, 2, 3
# 주의) 리스트와 가장 큰 차이점 -> 중복제거 여부
# 특징) 리스트는 중복을 허용 -> 리스트의 핵심은 순서(인덱스)
l1 = [1, 2, 1, 2, 3]
print(l1, type(l1))

# 3) 중복을 제거한 리스트 만들기
l1 = [1, 2, 1, 2, 3, 1, 2, 3, 4]
l2 = list(set(l1))  # set()을 통해 중복제거 후, list()통해 리스트 생성
print(l1, '->', l2)  # [1, 2, 1, 2, 3, 1, 2, 3, 4] -> [1, 2, 3, 4]

# 4) 튜플: 수정불가 (Read Only) <-> 리스트, 딕셔너리: 수정가능
tel1 = dict()  # 공백 딕셔너리 생성시에는 {}보다 dict()를 쓰는 것이 좋음
tel1['홍길동'] = '010-1234-5678'  # 딕셔너리명['키'] = '값'
tel1['강감찬'] = '010-1234-1234'
tel1['이순신'] = '010-1234-4321'
for t in tel1.items():
    # t[0] = 'AA'  # 튜플은 할당(수정) 불가
    print(t, t[0], t[1])