본문 바로가기
컴퓨터 프로그래밍/python

Python 사전(Dictionary)과 집합(Set)

by JaeBaek 2020. 8. 12.

Dictionary (Pixels)

■ 사전 (Dictionary)

★ 키와 값의 쌍

사전은 키와 값의 쌍을 저장하는 대용량의 자료 구조입니다. 해시 알고리즘을 사용하여 일대일로 대응되는 특성이 있기 때문에 맵이라고도 부르는데 관련된 키와 쌍이라고 해서 연관배열이라고도 부릅니다. 

 사전을 정의할 때에는 { } 괄호 안에 키:값 형태로 콤마 구분을 하여 나열을 하면 됩니다. 

 

 

dic

dic={'life':'인생','gut':'배짱','karma':'업보'}

print(dic)

print(dic['life'])

print(dic.get('love')) # get은 key가 없을 때, 에러 발생대신 None을 반환합니다.

result

{'life': '인생', 'gut': '배짱', 'karma': '업보'}
인생
None

 

★ 사전 관리

사전 관리는 정의 내린 사전을 추가하거나 이름을 변경하거나 조작을 할 수 있습니다. 

사전관리

dic={'life':'인생','gut':'배짱','karma':'업보'}

dic['karma']='업' # 변경

dic['love']='사랑' # 추가

del dic['gut'] # 제거

print(dic)

result

{'life': '인생', 'karma': '업', 'love': '사랑'}

 

 

※ 사전의 각각 key, value, item들을 알고 싶다면

print(dic.keys())

print(dic.values())

print(dic.items())

을 작성하면 출력문을 볼 수 있습니다.

 

update : 하나의 사전에 또 다른 사전을 업데이트 시키는 기능입니다.

 update

dic={'life':'인생','gut':'배짱','karma':'업보'}

dic2={'moral':'도덕','love':'사랑'}

dic.update(dic2)

print(dic)

result

{'life': '인생', 'gut': '배짱', 'karma': '업보', 'moral': '도덕', 'love': '사랑'}

 

사전의 활용

사전은 키의 중복을 허락하지 않고 정보를 저장한다는 면에서 실용적입니다. 따라서 대량의 관련 정보를 저장할 수 있고, 빠른 속도로 검색을 할 수 있게 됩니다. 

 

문제 : 다음 노래 가사의 알파벳 개수를 구하시오. (대소문자 구분하지 않음.)

song="""We're under pressure,

Seven billion people in the world trying to fit in

Keep it together,

Smile on your face even though your heart is frowning

But hey now, you know girl,

We both know it's a cruel world

But I will take my chances"""

 

답 : 각각의 요소들을 검사를 할 method를 사용을 해야합니다. 먼저 각 위치의 값이 알파벳인가? 따라서 isalpha를 사용해야합니다. 그리고 대 소문자를 구분하지 않으므로 알파벳이 맞다면 lower로 소문자로 바꿔줍니다. 제일 처음 발견이 되는 알파벳은 키를 추가를 하고, 두 번째 이상으로 나오면 횟수를 증가 시킵니다. 

 

song="""We're under pressure,

Seven billion people in the world trying to fit in

Keep it together,

Smile on your face even though your heart is frowning

But hey now, you know girl,

We both know it's a cruel world

But I will take my chances"""

 

alphabet=dict()

for c in song:

    if c.isalpha()==False:

        continue

    c=c.lower()

    if c not in alphabet:

        alphabet[c]=1

    else:

        alphabet[c]+=1

print(alphabet)

 

답 : {'w': 9, 'e': 24, 'r': 14, 'u': 9, 'n': 14, 'd': 3, 'p': 4, 's': 7, 'v': 2, 'b': 4, 'i': 14, 'l': 10, 'o': 16, 't': 14, 'h': 8, 'y': 6, 'g': 5, 'f': 3, 'k': 4, 'm':  2, 'a': 5, 'c': 4}

 

 

■ 집합

★ 집합 정의

집합은 여러 가지 값의 모임이며, 집합을 정의할 때는 { } 괄호 안에 키를 콤마로 구분하여 나열한다. 사전과 다른 점은 값은 없고 키만 있다는 점입니다. 집합은 값의 유무만을 주 관심사로 두고 있기 때문에 중복의 여부를 허용하지 않고, 순서는 상관이 없습니다. 집합은 수정이 가능한 자료입니다. 리스트나 튜플로 서로 변환이 가능하고, 키 값만 가져옵니다. 

 

set

asia={'korea','china','japan'}

asia.add('vietnam'# 추가

asia.add('china'# 이미 china가 있어 중복. 따라서 추가X

asia.remove('japan'# 제거

print(asia)

asia.update({'singapore','hongkong','korea'})

print(asia)

result

{'china', 'korea', 'vietnam'}
{'china', 'korea', 'hongkong', 'singapore', 'vietnam'}

위에서 add 기능은 집합에서 원소를 추가하는 것이고, remove 기능은 집합에서 원소를 제거하는 것입니다. 그리고 update 기능은 집합끼리 결합하여 합집합을 만드는 것입니다.

 

 

★ 집합 연산

연산 기호 method 설명
합집합 | union 두 집합의 모든 원소
교집합 & intersection 두 집합 모두에 있는 원소
차집합 - difference 왼쪽 집합의 원소 중 오른쪽 집합의 원소를 뺀 것
배타적 차집합 ^ symmetric_difference 한쪽 집합에만 있는 원소의 합

배타적 차집합은 합집합에서 교집합을 뺀 원소들의 합입니다. 

 

set 연산

first={2,4,6,8,10,12}

second={3,6,9,12,15}

print("교집합",first&second)

print("합집합",first|second)

print("차집합",first-second)

print("배타적 차집합",first^second)

result

교집합 {12, 6}
합집합 {2, 3, 4, 6, 8, 9, 10, 12, 15}
차집합 {8, 2, 10, 4}
배타적 차집합 {2, 3, 4, 8, 9, 10, 15}

부분 집합 여부의 조사

연산 기호 method 설명
부분집합 <= issubset 왼쪽이 오른쪽의 부분집합인지 조사한다.
진성 부분집합 <   부분집합이면서 여분의 원소가 더 있다.
포함집합 >= issuperset 왼쪽이 오른쪽 집합을 포함하는지 조사한다.
진성 포함집합 >   포함집합이면서 여분의 원소가 더 있다.

 

'컴퓨터 프로그래밍 > python' 카테고리의 다른 글

Python 표준 모듈  (0) 2020.08.13
Python 컬렉션(Collection)  (0) 2020.08.13
Python 리스트(list) & 튜플(tuple)  (0) 2020.08.12
Python 포맷팅(Format)  (0) 2020.08.12
Python 문자열 관리(String management)  (0) 2020.08.12

댓글