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

1. 튜플(tuple)

 

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

 

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

 

그림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값만 받아온다

 

 

 

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

 

 

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

 

 

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

 

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

TAGS.

Comments