본문 바로가기

Python 기초

파이썬 기초(6)-딕셔너리(Dictionary), 집합(Set)

*이 글을 읽기전에 작성자 개인의견이 있으니, 다른 블로그와 교차로 읽는것을 권장합니다.*

1. 딕셔너리(Dictionary)

1-1. 딕셔너리 자료형

딕셔너리(Dictionary)키(Key)-값(Value)처럼 한 쌍의 대응관계를 나타내는 자료형입니다. 딕셔너리는 리스트, 튜플처럼 순차적으로 요소값을 구하지 않고, 키값만을 이용하여 value값을 구합니다. 리스트처럼 가변적(variable)이면서, {}를 사용하여 표현합니다. 딕셔너리 자료형은 다른 말로 연관 배열(associative array) 또는 해시(hash)라고도 합니다. 코드짤때, hashable이라는 용어가 나오면 딕셔너리 자료형이라고 생각하면 됩니다.

#딕셔너리
a={}
print(a)
print(type(a))
b={1:'son',2:'fam',3:'mam'}
print(b)
print(type(b))

딕셔너리 형태

# 키값으로 value값 뽑기
print(b[1])
print(b[2])

딕셔너리 자료형은 요소값을 추가하거나 변경가능합니다.

# 새로운 키값 생성과 수정
a={1:'coke'}
print(a)

a[2]='pepsi'#추가
print(a)

a[1]='cola' #수정
print(a)

딕셔너리 자료형에서 키값을 리스트 자료형으로 사용할 수 없습니다.

#키값 리스트 에러
a[[1,2,3]]=['one','two','three']

딕셔너리하지 못한 자료형: '리스트'

len()함수를 이용해, 딕셔너리 요소값을 계산할 수 있습니다.

# len() 계산
print(len(a))

1-2. 딕셔너리에서 사용하는 메서드

딕셔너리 자료형에서 주로 사용하는 메서드는 다음과 같습니다.

  • len()
  • keys()
  • values()
  • items()
  • get()
  • pop()

Keys() 메서드는 딕셔너리의 모든 키값을 반환합니다.

#keys()
print(a)
print(a.keys())

Values() 메서드는 딕셔너리의 모든 value값을 반환합니다.

#values()
print(a.values())

Items() 메서드는 딕셔너리의 모든 키,value값을 쌍으로 반환합니다.

#items()
print(a.items())

Get()와 메서드는 특정 키에 대한 value값을 반환하고, 입력한 키에 대응되는 value값이 딕셔너리 자료형에 없을 경우 None을 반환합니다.

#get()
print(a.get(1))
print(a.get(12))
print(a.get(5,'해당 value값 없음'))

get(키값,value값)으로 출력할때, 해당 키가 없을 경우, 뒤의 value값으로 출력

Pop() 메서드는 특정 키에 대한 값을 제거하고 그 값을 반환합니다. 키가 없다면 에러가 나옵니다.

#pop()
c=a.pop(2)
print(a)
print(c)

In 연산자를 이용해, 딕셔너리에 특정 키가 있는지 확인할 수 있습니다. 결과는 bool자료형으로 참,거짓을 판별합니다.

#in연산자
a={1:'one',2:'two',3:'three',4:'four'}
print(3 in a)
print('hash' in a)

2. 집합(Set) 자료형

집합(set)자료형은 이름그대로 집합모양처럼 연관된 것으로 쉽게 처리하기 위해 만든 자료형입니다. 중복되지 않는 항목들의 컬렉션입니다.

2-1. 집합 자료형 형태

# 집합 자료형
a={}
print(a)
print(type(a)) # {}에 메모리값을 채우지 않는다면 딕셔너리 타입

a={1,3,5,7,9}
print(a)
print(type(a))

set()함수로 리스트 자료형을 집합 자료형으로 변환할 수 있습니다.

#set()함수로 리스트->집합 변환
ee=set([2,3,4,5])
print(ee)
print(type(ee))

 

집합 자료형은 중복자료를 인정하지 않으며, 딕셔너리와 마찬가지로 순서가 없는 자료형입니다. 인덱스 위치 순서가 없습니다.

#중복자료X
a3={1,1,1,1,1,3,5}
print(a3)

#인덱스 위치 순서X
a4=[1,3,5,4,2,9,11,7,6,4]
print(a4)
a5=set(a4)
print(a5)

2-2. 집합 자료형의 메서드

집합자료형에서 사용되는 메서드는 다음과 같습니다.

  • Add()
  • Update()
  • Remove()
  • Discard()
  • Copy()

add() 메서드는 집합에 하나씩 요소를 추가합니다.

#add()
print(a)
a.add(135)
print(a)
a.add(3.15)
print(a)

집합 자료형의 인덱스 위치는 순서가 없기 때문에, 인덱스 위치를 고민할 필요 없다.

update() 메서드는 집합에 여러 항목을 추가합니다.

#update()
a={1,3,5,7,9}
a.update([2,4,6,8])
print(a)

단, update()메서드를 사용시 안에 리스트 자료형으로 입력해 줘야한다.

remove() 와 discard() 메서드는 집합의 요소값을 제거합니다. 단 차이점이 있습니다.

  • remove() 메서드: 제거하려는 요소값이 없다면 에러 발생
  • discard() 메서드: 제거하려는 요소값이 없더라도 에러가 발생하지 않음
#remove() 
a={1,3,5,7,9}
a.remove(2) #에러발생

#discar()
a={1,3,5,7,9}
a.discard(2)
print(a) # 에러없음

copy()메서드는 집합을 복사합니다.

#copy()
a={1,2,3}
b=a.copy()
print(a)
print(b)
print(id(a)) # a !=b
print(id(b)) # 카피하더라도 메모리값 주소는 다름

2-3. 집합 이미지의 메서드

집합 자료형을 집합의 이미지, 정의처럼 연산할 수 있는 메서드가 있습니다. 집합형태의 메서드와 같은 역할의 연산자들은 다음과 같습니다.

  • union() , | 연산자로도 사용
  • Intersection, & 연산자로도 사용
  • Difference, - 연산자로도 사용
  • Symmetric_difference, ^ 연산자로도 사용

union() 메서드와 | 연산자(shift + \)는 두 집합간의 합집합처럼 사용합니다.

#Union(), |연산자
a={1,3,5,7}
b={+2,4,6,8}
c=a.union(b)
print(c)
c=a|b
print(c)

intersection() 메서드와 & 연산자는 두 집합 간의 교집합처럼 사용됩니다.

#intersection(), &연산자
a={1,3,5,7}
b={+2,4,6,8}
c=a.intersection(b)
print(c)
c=a&b
print(c)

difference() 메서드와 - 연산자는 A집합-교집합, 즉 차집합처럼 사용됩니다.

#difference(), -연산자
a={1,3,5,7}
b={+2,4,6,8}
c=a.difference(b)
print(c)
c=a-b
print(c)

 

symmetric_difference() 메서드와 ^연산자는 합집합-교집합=대칭 차집합 처럼 사용됩니다.

#symmetric_difference(), ^연산자
a={1,3,5,7}
b={+2,4,6,8}
c=a.symmetric_difference(b)
print(c)
c=a^b
print(c)

참고: difference는 차이점을, symmetric은 대칭을 뜻합니다.