파이썬 딕셔너리(dictionary), set(집합) 정리

Python

Posted by kwon on 2019-10-13

딕셔너리

딕셔너리는 key값과 value값의 한 쌍의 원소들의 순서가 없는 집합이다. 딕셔너리는 보통 특정 주제에 대해 연관된 값들을 모아둘 때 주로 사용.

일반적인 딕셔너리의 모습 : {‘a’: 1, ‘b’: 2}

  • 순서가 없기 때문에 key로 접근
  • 키 이름이 중복되면 가장 뒤에 있는 값만 사용
  • 키에는 문자열 뿐 아니라 정수, 실수, 부울도 사용할 수 있으며 자료형을 섞어서 사용 가능. 단, 리스트와 딕셔너리등은 사용불가
  • 값에는 리스트, 딕셔너리 등을 포함하여 모든 자료형을 사용 가능

딕셔너리 수정

  • 단일 수정은 키로 접근하여 값을 할당
1
2
3
a = {'kwon' : 24, 'kim' : 29, 'sin' : 28, 'jo' : 23, 'park' : 25}
a['kwon'] = 25
print(a)

-> 결과 : {‘kwon’: 25, ‘kim’: 29, ‘sin’: 28, ‘jo’: 23, ‘park’: 25}

  • 여러 값 수정은 update() 메소드를 사용. 키가 없는 값일 경우 추가된다.
1
2
3
a = {'kwon' : 24, 'kim' : 29, 'sin' : 28, 'jo' : 23, 'park' : 25}
a.update({'kwon' : 26, 'sin' : 30, 'na' : 25})
print(a)

-> 결과 : {‘kwon’: 26, ‘kim’: 29, ‘sin’: 30, ‘jo’: 23, ‘park’: 25, ‘na’: 25}

딕셔너리 내장함수

  • 딕셔너리 키 or 값 리스트로 가져오기 : keys(), values()
1
2
3
4
5
6
a = {'kwon' : 24, 'kim' : 29, 'sin' : 28, 'jo' : 23, 'park' : 25}
print(a.keys())
print(a.values())

for key in a.keys():
print(key, end=' ')

-> 결과 :
dict_keys([‘kwon’, ‘kim’, ‘sin’, ‘jo’, ‘park’])

dict_values([24, 29, 28, 23, 25])

kwon kim sin jo park

  • 키, 값 쌍을 튜플로 가져오기 : items()
1
2
3
4
5
a = {'kwon' : 24, 'kim' : 29, 'sin' : 28, 'jo' : 23, 'park' : 25}
print(a.items())

for key, val in a.items():
print("key = {key}, value={value}".format(key=key,value=val))

-> 결과 :

dict_items([(‘kwon’, 24), (‘kim’, 29), (‘sin’, 28), (‘jo’, 23), (‘park’, 25)])

key = kwon, value=24

key = kim, value=29

key = sin, value=28

key = jo, value=23

key = park, value=25

  • 딕셔너리 키로 값 가져오기 : get(key)
1
2
a = {'kwon' : 24, 'kim' : 29, 'sin' : 28, 'jo' : 23, 'park' : 25}
print(a.get("kwon"), a.get("sin"))

-> 결과 : 24 28

  • 딕셔너리에 해당 키가 있는지 검사 : in
1
2
3
a = {'kwon' : 24, 'kim' : 29, 'sin' : 28, 'jo' : 23, 'park' : 25}
print('kwon' in a)
print('lee' in a)

-> 결과 :
True

False

  • 딕셔너리의 모든 키와 값 지우기 : clear()
1
2
3
a = {'kwon' : 24, 'kim' : 29, 'sin' : 28, 'jo' : 23, 'park' : 25}
a.clear()
print(a)

-> 결과 : {}

set(집합)

set은 수학에서 이야기하는 집합과 비슷하다. 순서가 없고, 집합 안에는 중복을 허용하지 않는다. 중괄호를 사용하는 것은 dictionary와 비슷하지만, key가 없고 값만 존재한다.

중복을 허용하지 않는다는 특징은 매우 유용하게 사용 가능하다. 가령, 어떠한 리스트에서 중복된 값을 제거하는 방법으로도 이용가능하다.

1
2
3
4
5
list1 = [1, 2, 3, 2, 3]
set1 = set(list1) # list를 set으로 형변환
print(set1)
list2 = list(set1) # 중복 제거 후 다시 list로 형변환
print(list2)

-> 결과 :

{1, 2, 3}

[1, 2, 3]

  • set(집합) 선언
1
2
3
set1 = set([1, 2, 3, 3])
set2 = set("information communication")
print(set1, set2)

-> 결과 : {1, 2, 3} {‘t’, ‘i’, ‘c’, ‘r’, ‘ ‘, ‘m’, ‘f’, ‘n’, ‘u’, ‘a’, ‘o’}

위와 같이 순서가 없고, 중복을 허용하지 않는다.

  • 값 추가 : add(item)
  • 값 여러개 추가 : update(item)
  • 값 제거 : remove(item)
  • 집합 제거 : del
1
2
3
4
5
6
7
8
9
10
set1 = set([1, 2, 3,])
print('set1 :', set1)
set1.add(4)
print('add(4) :', set1)

set1.update([5, 6, 7, 8])
print('update([5, 6, 7, 8]) :', set1)

set1.remove(6)
print('remove(6) :', set1)

-> 결과 :

set1 : {1, 2, 3}

add(4) : {1, 2, 3, 4}

update([5, 6, 7, 8]) : {1, 2, 3, 4, 5, 6, 7, 8}

remove(6) : {1, 2, 3, 4, 5, 7, 8}

집합 연산

  • 교집합 : & 연산자 or intersection
  • 합집합 : | 연산자 or union
  • 차집합 : - 연산자 or difference
  • 대칭차집합(합집합 - 교집합) : ^ 연산자 or symmetric_difference
1
2
3
4
5
6
7
8
9
10
11
12
13
set1 = set([1,2,3])
set2 = set([2,4,5,6])
print(set1 & set2)
print(set1.intersection(set2))

print(set1 | set2)
print(set1.union(set2))

print(set1 - set2)
print(set1.difference(set2))
print(set2.difference(set1))

print(set1 ^ set2)

-> 결과 :

{2}

{2}

{1, 2, 3, 4, 5, 6}

{1, 2, 3, 4, 5, 6}

{1, 3}

{1, 3}

{4, 5, 6}

{1, 3, 4, 5, 6}

참조
https://wikidocs.net/16043
https://ledgku.tistory.com/49