파이썬의 튜플(Tuple), 집합(set), 사전(dict)에 대하여

1. 튜플(tuple)

 

리스트랑 비슷하지만 [1,2,3] 대신 (1,2,3)같이 ()을 사용

 

리스트가 사용하는 대부분 연산이 가능하나 원소의 변경이 불가능하다

 

etc-image-0
그림1. tuple 원소 변경시 에러

 

이러한 특징때문에 로그램 동작하면서 절대 변경되어서는 안되는 데이터(예:학번, 우편번호 등)를 저장할 때 사용한다

 

사용자 실수에 의한 데이터 변경 에러를 미리 방지

 

 

2. 하나의 원소를 가지는 튜플

 

(1)은 정수로 인식하고 (1,)을 튜플로 인식

 

a=(1)

a
1

type(a)
int

b=(1,)

b
(1,)

type(b)
tuple

 

 

 

3. 집합(set)

 

데이터를 순서 없이 저장하는데 중복을 허용하고 싶지 않을때 리스트보다 유용하다

 

s = set([1,2,3,1,2,3])

s
{1,2,3}

type(s)
set

##리스트의 중복을 제거하는 기술

list_duplication = [1,2,3,4,1,2,3,4]

list_unique = list(set(list_duplication))

list_unique
[1,2,3,4]

#set 대신에 {}도 사용가능

s = {1,2,3,1,2,3}

type(s)
set

 

리스트의 중복을 집합을 이용하여 제거

 

set함수 대신에 {}으로 집합을 만들수도 있다

 

수학 연산이 가능하다는 특징이 있음

 

s1 = set([1,2,3,4,5])

s2 = set([3,4,5,6,7])

type(s1), type(s2)
(set,set)

#합집합
s1.union(s2)
{1,2,3,4,5,6,7}

s1|s2
{1,2,3,4,5,6,7}

#교집합
s1.intersection(s2)
{3,4,5}

s1&s2
{3,4,5}

#차집합
s1.difference(s2)
{1,2}

s1-s2
{1,2}

 

차집합 difference는 데이터프레임 핸들링에서 쓴 적이 많았지

 

 

4. 사전(dictionary)

 

사전에서 자주 사용하는 기술들 몇가지

 

key-value쌍을 새로 추가할려면 dict[key]=value

 

country_code = {"america":1, "Korea":82, "china":86, "japan":81}

country_code
{"america":1, "Korea":82, "china":86, "japan":81}

#key-value쌍을 새로 추가

country_code['german'] = 49

country_code
{"america":1, "Korea":82, "china":86, "japan":81, "german":49}

 

원래 존재하는 key의 value를 변경할려면 새로 dict[key]= new_value

 

#value 변경

country_code['japan'] = 71

country_code
{"america":1, "Korea":82, "china":86, "japan":71, "german":49}

 

원래 존재하는 key는 변경되지 않고 새로운 key로 추가된다

 

#value 변경

country_code['kapan'] = 71

country_code
{"america":1, "Korea":82, "china":86, "japan":71, "german":49, "kapan":71}

 

사전에서 key,value 쌍을 언패킹할 필요가 있다

 

items()를 사용해야 unpacking이 가능함

 

for문에서 unpacking할 때 for key, value in dict.items():

 

##자주 사용하는 unpacking

for key, value in country_code.items():
    
    print('key':key)
    print('value':value)
    
    
key: america
value: 1
key: Korea
value: 82
key: china
value: 86
key: japan
value: 71

 

참고로 dict type은 단순히 for문에서 iterable하면 key값만 받아온다

 

etc-image-1

 

 

리스트에서 단어의 빈도수를 세서 사전으로 만드는 프로그램

 

etc-image-2

 

사전에서 원하는 원소를 기준으로 sorting하는 방법

 

etc-image-3

 

temp=[key,value]를 생각하는 것이 쉽진 않다

 

etc-image-4

 

64줄은 단순히 첫번째 원소 string을 기준으로 sorting하므로 문자순 sorting

 

하지만 원하는 것은 빈도수 순으로 sorting하고 싶음

 

key 인자에 함수를 넘겨서 sorting하면 가능

 

getkey는 리스트의 첫번째 원소를 가져옴

 

dict_list 각 리스트 원소의 첫번째 원소는 빈도수임

 

그래서 빈도수 순으로 정렬할 수 있음

 

그러면 이제 for loop를 이용하면 사전으로 만들 수 있을 것임

 

옛날에 공부할때는 잘 몰랐는데

 

지금은 람다함수로 sorting하는 법 배웠어가지고... 

 

sorted(dict, key = lambda item: item[1], reverse=True)

 

728x90