Programing/Python

#데이터 타입과 컬렉션 - 3

CouqueD'asse 2022. 6. 17. 14:23

dictionary

  • 키와 값을 갖는 데이터 구조
  • 키는 내부적으로 hash값으로 저장
  • 순서를 따지지 않음. 즉,  인덱스가 없음
  • 항목 추가 및 변경
    • 기존에 키가 존재하면, 새로운 값으로 업데이트
    • 존재하지 않으면, 새로운 키, 값 생성
a = {'Korea' : 'Seoul', 'Canada': 'Ottawa', 'USA' : 'Washington D.C'}
print(a['Korea'])

Seoul

a['Japan'] = 'Tokyo'
print(a)

{'Korea': 'Seoul', 'Canada': 'Ottawa', 'USA': 'Washington D.C', 'Japan': 'Tokyo'}

b= {0:1, 1:6, 4:8, 7:9}
print(b[4])

8

update()

  • 두 딕셔너리를 병합함
  • 겹치는 키가 있다면 parameter로 전달되는 키 값이 overwrite된다.
a = {'a':1, 'b':2, 'c':3}
b = {'a':2, 'd':4, 'e':5}
a.update(b)
print(a)

{'a': 2, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

Key 삭제

  • pop 함수 이용
  • del 키워드 사용
a = {'a':1, 'b':2, 'c':3}
a.pop('b')
print(a)

{'a': 1, 'c': 3}

a = {'a':1, 'b':2, 'c':3}
del a['b']
print(a)

{'a': 1, 'c': 3}

clear()

  • 딕셔너리의 모든 값을 초기화
a = {'a':1, 'b':2, 'c':3}
print(a)
a.clear()
print(a)

{'a': 1, 'b': 2, 'c': 3}
{}

in

  • key 값 존재 확인
  • 0(1) 연산 : 딕셔너리의 크기와 관계없이 항상 연산 속도가 일정하다는 의미
a = {'a':1, 'b':2, 'c':3}
print(a)
'b' in a

{'a': 1, 'b': 2, 'c': 3}
Out: True

vlaue access

  • dict[key]로 접근, 키가 없는 경우 에러 발생
  • .get() 함수로 접근, 키가 없는 경우 None 반환
a = {'a':1, 'b':2, 'c':3}
print(a['b'])
print(a.get('d'))

2
None

모든 keys, values 접근

  • keys() : 키만 반환
  • vlaues() : 값만 반환
  • items() : 키, 값의 튜플을 반환
print(a)
print(list(a.keys()))
print(a.values())
list(a.items())

{'a': 1, 'b': 2, 'c': 3}
['a', 'b', 'c']
dict_values([1, 2, 3])
[('a', 1), ('b', 2), ('c', 3)]

 

set

  • dictionary에서 key만 활용하는 데이터 구조로 이해
  • 수학에서의 집합과 동일한 개념
  • set()으로 집합으로 변환
  • set operations
    • 수학연산과 동일
    • 교집합, 합집합, 차집합 등 지원
a = {1, 1, 2, 3, 4, 4, 5}
print(a)
a = set()
a = [1, 1, 2, 3, 4, 4, 5]
b = set(a)
print(b)

{1, 2, 3, 4, 5}
[1, 1, 2, 3, 4, 4, 5]
{1, 2, 3, 4, 5}

a = {1, 2, 3}
b = {2, 3, 4}
print(a.union(b)) # 합지합
print(a.intersection(b)) # 교집합
print(a.difference(b)) # 차집합
print(a.issubset(b)) # 부분 집합

{1, 2, 3, 4}
{2, 3}
{1}
False