ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 16. 딕셔너리(Dictionary ADT), 파이썬
    Python/파이썬 자료구조 알고리듬 2019. 6. 10. 09:15
    반응형

    먼저 파이썬 내장 딕셔너리 자료형을 이용해 다음 텍스트에서 각 단어가 몇 번 나오는 지를 확인하는 프로그램을 구현해 봅시다. 

    the brown fox jumped over the blue fox

    예상 결과

    the 2 
    brown 1 
    fox 2 
    jumped 1 
    over 1 
    blue 1

    코딩

    def count_words(text):
        words = text.split(' ')
        counter = {}
        for word in words:
            if word in counter:
                counter[word] += 1
            else:
                counter[word] = 1
        for word in counter:
            print(word, counter[word])
    
    
    count_words('the brown fox jumped over the blue fox')

    문자열을 특정 문자를 기준으로 나눠줄 때는 split을 사용합니다. 

    딕셔너리에 특정 키가 있는 지 in을 이용해 확인할 수 있습니다.
    (없는 키에 데이터를 넣으면 에러가 발생합니다.)


    새로운 딕셔너리 요소는 다음 방법으로 입력할 수 있습니다. 
    dict['key'] = value

     

    키의 여부를 확인하지 않고 디폴트 값을 설정해서 처리하는 방법(get, setdefault)도 있습니다. 

    def count_words(text):
        words = text.split(' ')
        counter = {}
        for word in words:
            counter[word] = counter.get(word, 0) + 1
        for word in counter:
            print(word, counter[word])
    
    
    count_words('the brown fox jumped over the blue fox')
    def count_words(text):
        words = text.split(' ')
        counter = {}
        for word in words:
            counter.setdefault(word, 0)
            counter[word] += 1
        for word in counter:
            print(word, counter[word])
    
    
    count_words('the brown fox jumped over the blue fox')

    --------------------------------------------------------------------------------------

    딕셔너리의 정의는 사전처럼 키와 값으로 저장하는 자료구조입니다. 
    파이썬에는 딕셔너리 자료형이 있습니다만
    리스트와 객체를 이용해 자료형을 구현해 보도록 합니다. 
    기존 자료형에 특수한 기능을 추가할 때는 이런 경험이 도움이 됩니다. 

     

    재미는 없습니다.

     

    어짜피 파이썬 내장 딕셔너리를 사용할 테니, ADT로는 간략히 감만 잡아보도록 합니다. 

    class Element:
        def __init__(self, key, value):
            self.key = key
            self.value = value
    
    
    class Dict:
    
        def __init__(self):
            self.data = []
        
        def __len__(self):
            return len(self.data)
    
        def add(self, element):
            self.data.append(element)
    
        def find(self, key):
            for each in self.data:
                if each.key == key:
                    return each
    
        def remove(self, key):
            for i, each in enumerate(self.data):
                if each.key == key:
                    del self.data[i]
                    return True
            return False
    
        def show(self):
            for i in self.data:
                print(i.key, i.value)
    
    
    boo = Dict()
    
    boo.add(Element('the', 2))
    boo.add(Element('fox', 2))
    boo.add(Element('over', 1))
    boo.add(Element('fire', 1))
    boo.add(Element('brown', 1))
    print(len(boo))
    boo.show()
    print('----')
    boo.remove('fire')
    print(len(boo))
    boo.show()
    5
    the 2
    fox 2
    over 1
    fire 1
    brown 1
    ----
    4
    the 2
    fox 2
    over 1
    brown 1
    반응형
Designed by Tistory.