티스토리 뷰

728x90

<목차>

     

    1. 딕셔너리 (dictionary)

    딕셔너리는 키(Key)와 값(Value)의 쌍을 데이터로 가지는 자료형

     

    - 데이터가 순서와 상관 없이 저장된다. 

    - 키는 항상 고유해야한다. 

     

    - 매핑 타입이다. (시퀀스 타입 X)

     

    data = dict()
    data['지수'] = 'JISOO'
    data['제니'] = 'JENNIE'
    data['로제'] = 'ROSE'
    data['리사'] = 'LISA'
    
    print(data) # {'지수': 'JISOO', '제니': 'JENNIE', '로제': 'ROSE', '리사': 'LISA'}

     

    파이썬의 사전 자료형은 내부적으로 '해시 테이블(Hash Table)'을 이용하므로 기본적으로 데이터의 검색 및 수정에 있어서 O(1)의 시간에 처리할 수 있다는 장점을 갖는다.

    -> 키-값 쌍으로 구성된 데이터를 처리함에 있어서 리스트보다 훨씬 빠르게 동작한다. 

     

    2. 생성하기

    2-1. { }

     

    2-2. dict()

     

    2-3. 딕셔너리로 변환하기

    dict() 함수를 사용하여 두 값으로 이루어진 시퀀스를 딕셔너리로 변환할 수 있다. 

     

     

     

    3. 항목 추가 및 변경

    키에 참조되는 항목에 값을 할당하면 된다. 

     

    - 이미 존재하는 키라면 그 값을 새 값으로 대체한다.

    - 키가 존재하지 않는다면 새 키와 값이 딕셔너리에 추가된다. 

     

    4. 항목 얻기

    4-1. [key]

    - 딕셔너리에 키가 없으면 예회가 발생하므로 이를 처리해줘야한다. 

    -> 멤버십함수인 in을 이용한다. 

     

    키 멤버십 테스트 : in

     

    4-2. get()

    - 키가 존재하지 않으면 지정한 옵션값을 출력한다. 

    - 옵션을 지정하지 않는다면 None을 출력한다. 

     

    4-3. keys()

    딕셔너리의 모든 키를 가져온다. 

     

    - 파이썬2에서는 리스트를 반환한다. 

    - 파이썬3에서는 순회 가능한(iterable) 키들을 보여주는 dict_keys()를 반환한다. 

    -> 사용되지 않을 리스트를 생성하고 저장하기 위한 메모리와 시간을 소비하지 않기 때문에 아주 큰 딕셔너리에 유용하다. 

    -> 리스트로 사용하고 싶을 때는 list() 함수를 이용한다. 

    -> values(), ites() 함수 모두 마찬가지이다. 

     

    4-4. values()

    딕셔너리의 모든 값을 가져온다. 

     

    4-5. items()

    딕셔너리의 모든 키-값을 가져온다. 

    - 각 키와 값은 튜플로 반환된다. 

     

    4-6. len()

    딕셔너리의 키-값 쌍의 개수를 반환한다. 

     

    5. 결합하기

    5-1. {**a, **b}

     

    5-2. update()

     

    6. 삭제하기

    6-1. del

     

    6-2. pop()

     

    6-3. clear() 와 = {}

    딕셔너리에 있는 키-값 쌍을 모두 삭제한다. 

     

    7. 키 멤버십 테스트

     

    8. 할당하기

    8-1. =

     

    8-2. copy()

     

    8-3. deepcopy()

     

    9. 비교하기

     

    10. 순회하기

     

    11. 딕셔너리 컴프리헨션

    11-1. for문

    {키_표현식 : 값_표현식 for 표현식 in 순회 가능한 객체}
    word = 'letters'
    letter_counts = {letter: word.count(letter) for letter in word}
    letter_counts
    
    {'l': 1, 'e': 2, 't': 2, 'r': 1, 's': 1}

     

    - 문자열을 set 형식으로 변환하여 적용하면 더 효율적이다. 

    word = 'letters'
    letter_counts = {letter: word.count(letter) for letter in set(word)}
    letter_counts
    
    {'l': 1, 't': 2, 's': 1, 'r': 1, 'e': 2}

    -> set(word)를 순회하는 것은 문자열 word를 순회하는 것과 다르게 문자를 반환하기 때문에 딕셔너리의 키가 다르게 정렬된다. 

     

    11-2. for문 + if문

    {키_표현식 : 값_표현식 for 표현식 in 순회 가능한 객체 if 테스트}
    vowels = 'aeiou'
    word = 'onomatopoeia'
    vowel_counts = {letter: word.count(letter) for letter in set(word) if letter in vowels}
    vowel_counts
    
    {'o': 4, 'i': 1, 'a': 2, 'e': 1}

     

     

    사전 자료형에 특정한 원소가 있는지 검사

    '원소 in 사전'의 형태를 사용할 수 있다. → 값으로는 찾을 수 없음에 주의하자. (오직 키로만 가능!)

    if '리사' in data:
        print("'리사'를 키로 가지는 데이터가 존재합니다.")
    iterable 자료형 : 파이썬에서 리스트, 문자열, 튜플 등 순차적인 정보를 담는 자료형을 의미한다. in 문법은 이러한 iterable 자료형에 모두 사용이 가능한다. 

     

    사전 자료형 관련 함수

    keys() 함수 : 키 데이터만 뽑아서 리스트로 만든다. 

    values() 함수 : 값 데이터만 뽑아서 리스트로 만든다. 

    key_list = data.keys()
    print(key_list) # ['지수', '제니', '로제', '리사']
    
    value_list = data.values()
    print(value_list) # ['JISOO', 'JENNIE', 'ROSE', 'LISA']
    
    for key in key_list:
        print(data[key])

     

    코딩 테스트>> 학생의 번호가 1부터 10,000,000까지로 구성되어 있는 상황에서 최대 10,000명의 학생을 선택했다고 가정했을 때, 이후에 특정한 학생 번호가 주어졌을 경우 해당 학생이 선택되었는지를 알아야 할 때 사전 자료형을 사용하는 것이 리스트를 사용하는 것 보다 메모리 공간을 더 효율적으로 사용할 수 있다. 

     

     

     

     

    Ref.

    - 5. Data Structures — Python 3.9.6 documentation

    - Built-in Types — Python 3.9.6 documentation

     

    - 처음 시작하는 파이썬, 빌 누바노빅

     

     

     

    728x90

    'Python' 카테고리의 다른 글

    [Python] Set (집합)  (0) 2020.10.21
    [Python] 주석 - 한줄 주석, 여러줄 주석  (0) 2020.10.21
    [Python] 튜플 자료형 - ( , )  (0) 2020.10.21
    [Python] 자료형 - 문자열 자료형  (0) 2020.10.21
    [Python] 자료형 - 리스트 자료형  (0) 2020.10.20
    댓글
    공지사항
    최근에 올라온 글