ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 9. 딕셔너리 만들기
    Python/Grammar 2022. 12. 2. 10:21

    # 1. 딕셔너리 만들기

    딕셔너리는 말 글대로 사전에서 단어를 찾듯이 키를 찾으면 값을 가져올 수 있다고 해서 딕셔너리라는 명칭이 붙었다. 딕셔너리를 만드는방법은 여러 가지가 있지만 가장 기본적인 방법으로 중괄호 안에 키: 값을 넣은 {키1: 값1, 키2: 값2, ...} 형태로 만든다. 각 키와 값은 콤마로 구분해주며, 키와 값은 1:1 대응되어 하나의 키에는 값을 하나만 지정할 수 있다. 따라서 키와 값을 "키-값 쌍(key-value pair)"이라고 부른다. 참고로 딕셔너리와 같은 키-값 쌍 형태의 자료형을 Hash, Hash Map, Hash Table 등으로 부르며 REDIS 저장기법 중 HSET의 H도 해시를 의미한다. 

     

    1-1. 빈 딕셔너리 만들기

    : 빈 딕셔너리를 만들려면 중괄호 안에 아무 키-값 쌍을 넣지 않거나 dict함수를 사용한다. 일반적으로 빈 중괄호를 많이 사용한다. 

    • 빈 딕셔너리 = {}    # 일반적으로 많이 사용하는 방법
    • 빈 딕셔너리 = dict()

     

    1-2. 딕셔너리 만들기

    : 딕셔너리 키에는 문자열 뿐만 아니라 정수, 실수, 불도 사용할 수 있으며 자료형을 섞어서 사용해도 된다. 단, 키에는 리스트와 딕셔너리를 사용할 수 없다. 값에는 리스트, 딕셔너리를 포함한 모든 자료형을 사용할 수 있다. 딕셔너리를 만들 때는 위에서도 설명했지만 중괄호 안에 키-값 쌍을 넣어주는 방식을 많이 사용하는데 리스트, 튜플, 딕셔너리로 딕셔너리를 만들 때는 dict함수를 사용한다.  dict함수 안에 키=값 형태로 딕셔너리를 만들 때는 키에 작은 따옴표나 큰 따옴표를 사용하지 않아야 한다. 이 방법으로 딕셔너리를 만들면 키가 문자열로 바뀌기 때문이다.

    • 딕셔너리 = {키1: 값1, 키2: 값2}
    • 딕셔너리 = dict(키1=값1, 키2=값2)        # 키에 작은 따옴표나 큰 따옴표 사용 X, 키가 문자열일 때만 사용 가능
    • 딕셔너리 = dict(zip([키1, 키2], [값1, 값2]))  # zip 함수로 키 리스트와 값 리스트 매칭
    • 딕셔너리 = dict([(키1, 값1), (키2, 값2)])       # (키, 값) 튜플을 리스트 안에 넣어서 딕셔너리 생성
    • 딕셔너리 = dict({키1: 값1, 키2: 값2})             # 딕셔너리로 딕셔너리 생성
    # 중괄호에 키:값 형태로 입력
    >>> info = {'이름': '홍길동', '나이': 28, '주소': '서울시 성동구 행당동'}
    >>> info
    {'이름': '홍길동', '나이': 28, '주소': '서울시 성동구 행당동'}
    
    # dict 함수에 키=값 형태로 입력(키에 따옴표를 사용하지 않도록 주의!!!)
    >>> info = dict(이름='홍길동', 나이=28, 주소='서울시 성동구 행당동')
    >>> info
    {'이름': '홍길동', '나이': 28, '주소': '서울시 성동구 행당동'}
    
    # dict 함수에 zip 함수로 키 리스트와 값 리스트 매칭
    >>> info = dict(zip(['이름', '나이', '주소'], ['홍길동', 28, '서울시 성동구 행당동']))
    >>> info
    {'이름': '홍길동', '나이': 28, '주소': '서울시 성동구 행당동'}
    
    # dict 함수의 리스트 안에 (키, 값) 튜플 형태로 입력
    >>> info = dict([('이름', '홍길동'), ('나이', 28), ('주소', '서울시 성동구 행당동')])
    >>> info
    {'이름': '홍길동', '나이': 28, '주소': '서울시 성동구 행당동'}
    
    # dict 함수에 딕셔너리 형태로 입력(dict 함수 안의 딕셔너리를 그대로 써도 되는데 이 아이는 왜 존재하는 것일까...)
    >>> info = dict({'이름': '홍길동', '나이': 28, '주소': '서울시 성동구 행당동'})
    >>> info
    {'이름': '홍길동', '나이': 28, '주소': '서울시 성동구 행당동'}

     

     

    # 2. 딕셔너리의 키에 접근하고 값 할당하기

    딕셔너리 값에 접근할 때는 딕셔너리[키] 형태를 사용한다.

    2-1. 딕셔너리의 키에 값 할당하기

    :딕셔너리[키]로 키에 접근해 원하는 값을 할당한다. 기존 딕셔너리에 존재하지 않았던 키에 값을 할당하면 새로운 키-값 쌍이 추가된다.

    • 딕셔너리[키] = 값
    >>> score = {'korean': 90, 'mathematics': 100, 'english': 95, 'science': 80}
    >>> score['korean']
    90
    
    # 존재하지 않던 키에 접근
    >>> score['chinese'] = 95
    >>> score
    {'korean': 90, 'mathematics': 100, 'english': 95, 'science': 80, 'chinese' = 95} # 새로운 키-값 쌍 추가

     

    2-2. 딕셔너리에 키가 있는지 확인하기

    • 키 in 딕셔너리: 딕셔너리에 키가 있으면 True, 없으면 False 반환
    • 키 not in 딕셔너리: 딕셔너리에 키가 없으면 True, 있으면 False 반환

     

    2-3. 딕셔너리의 키 개수 구하기

    : 키의 개수는 len 함수를 사용해 구한다. 키와 값은 1대 1 대응 관계이므로 키의 개수는 곧 값의 개수와 같기 때문이다.

    • len(딕셔너리)
    >>> score = {'korean': 90, 'mathematics': 100, 'english': 95, 'science': 80}
    >>> len(score)
    4

     

     

    # 예제 1. 딕셔너리에 게임 캐릭터 능력치 저장하기 (본문 12.4 연습문제)

    다음 소스 코드를 완성하여 게임 캐릭터의 체력(health)과 이동 속도(movement speed)가 출력되게 만드세요.

    camille = {
        'health': 575.6,
        'health_regen': 1.7,
        'mana': 338.8,
        'mana_regen': 1.63,
        'melee': 125,
        'attack_damage': 60,
        'attack_speed': 0.625,
        'armor': 26,
        'magic_resistance': 32.1,
        'movement_speed': 340
    }
    print(camille['health'])
    print(camille['movement_speed'])

     

     

    # 예제 2. 딕셔너리에 게임 캐릭터 능력치 저장하기 (본문 12.5 심사문제)

    표준 입력으로 문자열 여러 개와 숫자(실수) 여러 개가 두 줄로 입력됩니다. 입력된 첫 번째 줄은 키, 두 번째 줄은 값으로 하여 딕셔너리를 생성한 뒤 딕셔너리를 출력하는 프로그램을 만드세요. input().split()의 결과를 변수 한 개에 저장하면 리스트로 저장됩니다.

    keys = input().split()
    values = map(float, input().split())
    print(dict(zip(keys, values)))

    댓글

Designed by Tistory.