딕셔너리란?
key, value로 이루어진 자료구조이고, C++, Java에서 Map과 같은 역할을 한다.
딕셔너리에 대한 메소드는 이 게시물에서 다루지 않고, 가장 간단한 딕셔너리 이용 방법에 대해 이야기 하고자 한다.
예제
바로 예제를 통해 알아보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #-*- coding: CP949 -*- # 기본적 dict 이용 방법 d = {} # dict 자료구조 선언1 print type(d) d = {'1':'a', '2':'b', '3':'c'} print d print d['1'] #print d['4'] # 존재하지 않기에 에러 # 특정 문자열이 있을 때 단어의 개수를 count하는 코드 word = 'hello world i m python!' d = dict() # dict 자료구조 선언2 for ch in word: if ch not in d: # d에 ch가 존재하지 않을 때 d[ch] = 1 else: # 이미 존재 할 때 d[ch] += 1 print d for i, j in d.items(): print 'key :', i, ' cnt :', j // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
위의 두가지 코드중 첫번째는 기본적으로 dictionary를 생성하여 어떤 값이 존재하는지 바로 참조할 수 있는 방식을 보여준다.
리스트는 인덱스를 통해 참조하지만 dictionary는 key를 통해 value를 참조한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #-*- coding: CP949 -*- # 특정 문자열이 있을 때 단어의 개수를 count하는 코드 word = 'hello world i m python!' d = dict() # dict 자료구조 선언2 for ch in word: d[ch] = d.get(ch, 0) + 1 print d for i, j in d.items(): print 'key :', i, ' cnt :', j // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
위의 코드는 이전 코드와 같지만, get이라는 메서드를 이용하여 단어의 개수를 count한다.
get(key, default)의 의미는 key가 d에 존재하면 그에 해당하는 value를 가져오고 존재하지 않으면 0이라는 값으로 초기화해준다.
따라서 처음 h가 들어왔을 때 d['h']는 없으므로 0으로 초기화 되고 거기에 +1이되어 1이 된다.
위의 파일은 파이썬 홈페이지에서 제공하는 mbox-short.txt라는 텍스트 파일이다.
여기서 From으로 시작하는 문자열에 존재하는 domain의 모든 수를 count 하는 프로그램은 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #-*- coding: CP949 -*- try: rhandle = open(raw_input('Enter file name: '),'r') except: print 'Can\'t open file' dic = {} for i in rhandle: if i.startswith('From') and not i.startswith('From:'): tmp = i.split() mail = tmp[1] domain = mail.split('@')[1] dic[domain] = dic.get(domain, 0) + 1 print dic rhandle.close() // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
파일내에 문자열 자체가 From과 From:이 있기에
From에 해당하는 것만 추출 한 후, split()를 해주면 mail의 1번 인덱스에 메일이 존재하게 된다.
이때 mail을 '@'을 기준으로 또 split해주면 mail은 [id,domin]으로 스플릿되어있다.
따라서 domain은 스플릿된 1번 인덱스를 받아 다음과 같이 dic[domain] = dic.get(domain, 0) + 1을 해주면 된다.
dictionary 자료구조를 익히기 위해서는 http://www.crocus.co.kr/605 다음 링크로 들어가 이 문제를 python으로 해결해보자.
'Basic > Python' 카테고리의 다른 글
파이썬 dictionary 전체 메소드 설명 및 예제 코드 (0) | 2017.07.12 |
---|---|
파이썬 translate, punctuation을 이용한 단어 구분 (0) | 2017.07.12 |
파이썬 10진수에서 2진수로 변환하는 프로그램 (5) | 2017.07.06 |
파이썬 문자열을 입력받았을 때 서로 다른 문자인지 체크하는 코드 (0) | 2017.07.06 |
파이썬 부르트 포스를 이용한 내림차순 정렬 코드 (0) | 2017.07.05 |