python/파이썬 기본

4. dict & set

Abokadoh 2023. 2. 11. 19:50

1. dictionary 란?

  • dict는 python을 사용하면 아주 많이 사용하게 될 자료형이다.
  • key 와 value를 갖는 데이터 구조이다.
  • key는 내부적으로 hash값으로 저장된다.
  • dict는 순서를 따지지 않는다. 쉽게 말해 인덱스가 없음!
# <in>
a = {'Korea': 'Seoul',
 'Canada': 'Ottawa',
 'USA': 'Washington D.C'}
b = {0:1, 1:6, 7:9, 8:10}

print(b[0]) # dict 구조에서 [ ]안에 0은 인덱스0이 아닌 key값 0이다.
print(a['Korea'])


# <out>
1
Seoul

 

2. dict 에서의 항목 추가 및 변경

  • 기존에 key가 존재하면, 새로운 값으로 업데이트
  • 존재하지 않으면, 새로운 key나 value를 생성한다.
# <in>
a = {'Korea': 'Seoul', 'Canada': 'Ottawa', 'USA': 'Washington D.C'}

a['Japan'] = 'Tokyo' # 'Japan' key를 추가하고 value값을 'Tokyo'로 
a['Japan'] = 'Kyoto' # 기존 'Japan' key의 value값을 'Kyoto'로 변경 
a['Japan2'] = 'Kyoto' # 'Japan2' key를 추가하고 value값을 'Kyoto'로 변경
a['China'] = 'Beijing' # 'China' key를 추가하고 value값을 'Beijing'로
a


# <out>
{'Korea': 'Seoul',
 'Canada': 'Ottawa',
 'USA': 'Washington D.C',
 'Japan': 'Kyoto',
 'Japan2': 'Kyoto',
 'China': 'Beijing'}

 

- dict 멤버 함수

updata()
  • 두 dictionary를 병합하는 함수
  • 겹치는 키가 있다면, parameter로 전달되는 key값이 overwrite된다.
# <in>
a = {'a': 1, 'b': 2,'c': 3}
b = {'a': 2, 'd':4, 'e': 5}

a.update(b) # 겹치는 키 값인 'a'는 overwrite 되고 나머지는 업데이트


# <out>
{'a': 2, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

 

key 삭제

  • del 키워드 사용
  • pop 함수 사용
# <in>
a = {'a': 1, 'b': 2, 'c': 3}

del a['b'] # a에서 키 값 'b'를 삭제

print(a)

# <out>
{'a': 1, 'c': 3}
# <in>
a = {'a': 1, 'b': 2, 'c': 3}

_pop = a.pop('b') # a에서 키 값 'b'를 추출하고 'b'의 value를 반환

print(_pop)
print(a)


# <out>
2
{'a': 1, 'c': 3}

 

clear()

  • dictionary의 모든 값을 초기화
# <in>
a = {'a':1, 'b':2}
print(a)

a.clear()
print(a)


# <out>
{'a': 1, 'b': 2}
{}

 

in

  • key값의 존재를 확인하는 함수
  • O(1) 연산 - dictionary의 크기와 관계없이 항상 연산의 속도가 일정하다는 의미
# <in>
a = {'a': 1, 'b':2, 'c': 3}
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100]

print(100 in b)
print(2 in a)


# <out>
True
False

 

3. value access

  • dict\[key\]로 접근, key가 없는 경우 error가 발생한다.
  • .get() 함수로 접근, key가 없는 경우 None을 반환한다.
# <in>
a = {'a': 1, 'b': 2, 'c': 3}

print(a.get('d'))
print(a['d'])

if 'd' in a:
    print(a['d'])


# <out>
None
KeyError

 

4. 모든 keys, values에 접근

  • .keys() → key 값만 반환
  • .values() → value 값만 반환
  • .items() → key, value 값을 튜플로 반환
# <in>
a = {'a': 1, 'b': 2, 'c': 3}

a
list(a.keys())
list(a.values())


# <out>
{'a': 1, 'b': 2, 'c': 3}
['a', 'b', 'c']
[1, 2, 3]

 

5. set

  • dictionary에서 key만 활용하는 데이터 구조로 이해하면 편하다.
  • 수학에서의 집합과 동일한 개념
# <in>
a = {1, 1, 2, 3, 3, 4, 1, 5}
print(a)


# <out>
{1, 2, 3, 4, 5}

 

  • set() 함수로 set type(집합)으로 변환이 가능하다.
# <in>
a= [1, 1, 2, 3, 3, 4, 1, 5]
print(a) 

b = set(a)
print(b)


# <out>
[1, 1, 2, 3, 3, 4, 1, 5]
{1, 2, 3, 4, 5}

 

  • set operations
    • 수학 연산과 동일
    • 교집합, 합집합, 차집합 등 지원
# <in>
a = {1, 2, 3}
b = {2, 3, 4}

print(a.union(b)) #합집합
print(a.intersection(b)) #교집합
print(a.difference(b)) #차집합
print(a.issubset(b)) #부분집합


# <out>
{1, 2, 3, 4}
{2, 3}
{1}
False