[python] python3 힘들게 배우기 #15

4 분 소요

ex39. 딕셔너리에 대해

dictionary란?

key값과 value를 쌍으로 하는 element를 가진 순서가 없는 집합이다. key값으로 index할 수 있으며, 각종 명령을 통해 변형 가능하다. {}(curly brace)를 통해 나타낸다.

순서가 없다는 것은 어떤 의미인가? dict는 말 그대로 우리가 어릴 적 사용하던 영어사전과 같다. 우리가 어떤 영단어 - 이를테면 ‘hotwpweo’ - 의 뜻을 찾고 싶다고 치자.

이 떄 우리가 하는 일은 영어사전에서 ‘H’ 섹션으로 가서 ‘hot’로시작하는 부분을 찾은 후, ‘hotwpweo’가 실제 존재하는지 찾는 것이다. 있으면 이 단어와 mapping 된 ‘뜻’을 읽어들이게 된다.

바로 이것이 python에서 dict가 수행하는 역할과 거의 정확히 들어맞게 되는 것이다.

myDict = {'a':'grace', 2:'glory', 'c': 1 + 3 * 5}
print(myDict)
{'a': 'grace', 2: 'glory', 'c': 16}

이번 예제를 수행하기 전에 아래 개념을 먼저 알고 넘어가자.

tuple이란?

element를 가진 순서가 있는 집합. list와 비슷하지만 변형이 불가능 한 것이 특징. 변형이 불가능하므로 이로 인해 dict의 key값으로 사용할 수 있는 등 특징이 있음.()를 사용해 나타낸다.

myTuple = (1, 'a', 5)
print(myTuple)
(1, 'a', 5)

list() function?

string을 비롯하여 list, tuple, dict, set 등 각종 자료형을 토대로 list새로 만들어 주는 함수. 본체는 건들지 않는다. (string은 split)

items() fucntion?

dict에 쓰일 수 있는 함수로서, tuple 을 element로 하는 listreference 형태로 제공한다. 즉 본체가 변하면 함께 변하는 복사본 이라는 얘기. [(key1, value1), (key2, value2), ...]형태이다.

예를 들면

myDict = {'a':'grace', 2:'glory', 'c': 1 + 3 * 5}
myItems = myDict.items()
print(myItems)

myDict['d'] = 'dice' #myDict dictionary에 'd' key와 'dice' value를 추가했다.
print(myItems)

print(myItems)를 추가 전 후로 실행했는데, 어떻게 변했을까?

dict_items([('a', 'grace'), (2, 'glory'), ('c', 16)])
dict_items([('a', 'grace'), (2, 'glory'), ('c', 16), ('d', 'dice')])

위와 같이 myItems list 값이 본체가 변함에 따라 변한 것을 확인할 수 있었다. 앞에 붙은 dict_items는 items()를 통해 생성된 list값임을 나타낸다.

이제 아래의 예제를 수행해보자.

#나라와 수도를 요소로 가지는 dict 생성
capital = {
    '한국' : '서울',
    '미국' : '워싱턴',
    '일본' : '도쿄',
}

#도시에 따른 감정을 표현하는 dict 생성
feeling ={
    '서울' : '멋짐',
    '워싱턴' : '따분함',
    '도쿄' : '조용함',
}

# 나라의 수도를 다음과 같이 key로 접근하여 print
print('-' * 10)
print('한국의 수도는:', capital['한국'])

# 수도별 느낌을 다음과 같이 key로 접근하여 print
print('-' * 10)
print('서울의 느낌은:', feeling['서울'])

# 이중으로 key값을 통한 접근 가능
print('-' * 10)
print('한국의 수도의 느낌은:', feeling[capital['한국']])

# for문을 사용하여 전부 출력해 보기. 이 때 items()를 사용하여 만든 임시 list를 list()함수를 이용해 list로 만들어낸 값을 for문을 이용한다.
# 이 리스트의 요소는 2개의 요소를 갖는 tuple, 즉 (key1, value1) 형태 이므로, for 문의 argment가 2개씩 들어간다.
print('-' * 10)
for k, v in list(capital.items()):
    print(f"{k}의 수도는 {v}이다.")


#마찬가지로 느낌 dict도 전부 출력해 보자.
print('-' * 10)
for k, v in list(feeling.items()):
    print(f"{k}의 느낌은 {v}이다.")

#print 문 안에 이중으로 배치 가능하다.
print('-' * 10)
for k, v in list(capital.items()):
    print(f"{k}의 수도의 느낌은 {feeling[v]}이다.")

결과는?

----------
한국의 수도는: 서울
----------
서울의 느낌은: 멋짐
----------
한국의 수도의 느낌은: 멋짐
----------
한국의 수도는 서울이다.
미국의 수도는 워싱턴이다.
일본의 수도는 도쿄이다.
----------
서울의 느낌은 멋짐이다.
워싱턴의 느낌은 따분함이다.
도쿄의 느낌은 조용함이다.
----------
한국의 수도의 느낌은 멋짐이다.
미국의 수도의 느낌은 따분함이다.
일본의 수도의 느낌은 조용함이다.

위와 같이 나온다.

댓글남기기