Post List

2015년 7월 30일 목요일

Python 기초 #08 Dictionaries

1. Dictionary 란 ?

앞서 07장에서 List에 대해서 살펴보았습니다.
다른 언어를 접하신 분들은 Collection 중 map, hashmap 등과 같이 Key 와 Value의 Pair로 이루어진 자료구조를 아시죠 ?
C#에서는 Generic 한 Key, Value Pair를 저장하는 공간을 Dictionary라고 합니다.
Python의 Dictionary도 이와 같은 것입니다.
통상적으로 Key Value Pair를 item 이라고 부릅니다.

2. Dictionary 특징

생성을 하는 방법은 중괄호 { } 안에다가 각 item 들을 콤마( , )로 구분하여 넣어주시면 됩니다.
각각의 item은 Key : Value 라는 형식으로 중간에 콜론을 넣은 2개의 값을 적어주시면 됩니다.
빈 Dictionary를  생성하려면 dict( ) 라는 내장 함수의 return 을 특정 변수에 저장하면 됩니다.
Dictionary[Key] 를 이용하여 특정 item의 value를 읽거나 변경할 수 있습니다.
len( ) 함수를 이용하여 item 개수를 알 수 있으며,
Key in Dictionary 연산을 이용하여 해당 Key 가 Dictionary 내에 있는지 확인이 가능합니다.

>>> Units = { 'Marine' : 'Riffle' , 'Zealot' : 'Sword' , 'Hydra' : 'Amylase' }
>>> print Units
{'Hydra': 'Amylase', 'Zealot': 'Sword', 'Marine': 'Riffle'}
>>> Units['Nova'] = 'Barret' # 새로운 item 추가
>>> print Units
{'Hydra': 'Amylase', 'Zealot': 'Sword', 'Marine': 'Riffle', 'Nova': 'Barret'}
>>> Units['Nova'] = 'K-14'
>>> print Units
{'Hydra': 'Amylase', 'Zealot': 'Sword', 'Marine': 'Riffle', 'Nova': 'K-14'}
>>> len(Units)
4
>>> print Units['Hydra']
Amylase
>>> 'Nova' in Units
True
>>> EmptyDict = dict()
>>> print EmptyDict
{}

위 예제에서 봐도 알 수 있겠지만, [ ] 연산을 이용하여 새로운 item 추가도 가능합니다.
그리고 저장되는 순서는 입력된 순서와는 상관이 없습니다.
Key 나 Value의 순서대로 어떤 작업을 해야 한다면,
Key나 Value의 List를 생성하여 Sort한 다음에
그 순서대로 Dictionary에서 값을 찾아서 진행하시면 됩니다.

3. Dictionary 의 운행법(traversal)

for ... in 을 이용하여 key 값으로 반복하면서 해당 Key에 대한 Value를 내부에서 추출하는 방법을 이용하면 됩니다.

for unit in Units:
    print unit, Units[unit]
...
Hydra Amylase
Zealot Sword
Marine Riffle
Nova K-14

그리고 아직 배우진 않았지만, 한가지 방법을 더 소개해 드리자면,
Dictionary 에선 item 및 key, value 등에 대해서 추출하여 List로 return 해주는 method들이 있습니다.
각각의 이름은 .items( ) , .keys( ) , .values( ) 와 같이 누가봐도 그 기능 예측이 가능하며,
대충 method 이름을 몰라도 찾을 수 있는 이름입니다.
여기서 items( ) 를 이용하여 key, value pair 를 tuple 형식으로 저장한 list를 생성한 다음 거기서 추출하는 방법도 있습니다.

for (unit, weapon) in Units.items():
    print unit, weapon
...
Hydra Amylase
Zealot Sword
Marine Riffle
Nova K-14

Dictionary 에 대해서는 이 정도만 알아도 앞서 배운 List 와 같이 활용하시면,
대부분의 작업이 다 가능합니다.

연습문제08-1
txt 파일의 이름을 입력받아서 해당 파일의 단어를 읽으세요.
그 파일내에 있는 각각의 단어를 Dictionary에 Key로 저장을 하고,
해당 단어가 몇 번 나왔는지 그 Count 수를 Value로 저장하세요.

연습문제08-2
연습문제07 에서 사용한 'mbox.txt'파일을 사용하여 다음의 작업을 하세요.
'mbox.txt'파일은 http://www.py4inf.com/code/mbox.txt 에서 다운로드가 가능합니다.
첫번째, commit이 무슨 요일에 수행되었는지를 찾아서 각 요일별 횟수를 Count 하세요.
두번째, e-mail을 보낸 사람들을 찾아서 각 횟수를 Count하세요.
세번째, e-mail을 보낸 Domain만 따로 Count 하세요. (Domain은 @ 뒤에 주소를 의미합니
다.)
네번째, 가장 e-mail을 많이 보낸 사람과 그 횟수를 출력하세요.
위 정보들은 모두 'From:' 으로 시작하는 줄에 있습니다.

댓글 없음:

댓글 쓰기