• get()
  • setdefault()
  • 문자개수 카운팅 프로그램


Dictionary

  • 리스트의 인덱스와는 달리 사전의 인덱스는 정수만이 아닌 다양한 데이터 유형을 사용할 수 있다.
  • 사전을 위한 인덱스를 Key라고 하고, 키와 그에 연관된 값을 키-값 쌍(key-value pair)라고 한다.
  • 중괄호{}로 정의
  • 리스트와는 달리 사전의 아이템들은 순서가 없다.
    • 순서가 없으므로 리스트처럼 슬라이스를 만들 수 없음
    • 순서가 없지만 키로 임의의 값을 쓸 수 있다는 사실 덕에 데이터를 강력한 방법으로 구성할 수 있음


딕셔너리에 저장된 key를 입력받아 값을 출력하고, 키에 없다면 추가하는 코드

 birthdays = {'Alice' : 'Apr 1', 'Bob' : 'Dec 12', 'jason' : 'may 30'}

while True :
    print('Enter a name: (black to quit)')
    name = input()
    if name == '':
        break

    if name in birthdays :
        print(birthdays[name] + ' is the birthday of ' + name)
    else :
        print('I do not have birthday information for ' + name)
        print('What is their birthday?')
        bday = input()
        birthdays[name] = bday
        print('birthday database updated.')


keys(), values(), items()

  • 사전의 키, 값, 키와 값 모두를 돌려주는 메소드
  • items() 메소드가 돌려주는 값은 키와 튜플이라는 점 유의
  • 위 메소드로 리스트 값을 얻고 싶다면 list()함수에 전달
    • ex) list(birthdays.keys())


The get()

  • 키와 값을 사용할때 사전에 키가 존재하는지 여부를 확인
  • get(가져올 값의 키, 키가 존재하지 않을 때 돌려줄 값)
items = {'apple' : 5, 'banana' : 7}
print('I am bringing ' + str(items.get('apple', 0)) + ' apple.')
>>> I am bringing 5 apple.
print('I am bringing ' + str(items.get('tomato', 0)) + ' tomato.')
>>> I am bringing 0 tomato.
  • get()을 사용하지않으면 에러가 발생한다.


The setdefault()

  • 딕셔너리 안의 어떤 특정한 키에 이미 값이 존재하지않는 경우만 그 키에 값을 설정할때가 종종있다.
  • setdefault(검사할 키, 키가 존재하지 않을 때 해당키에 설정할 수 있는 값)
  • 딕셔너리에 어떤 키가 존재하도록 보장할 수 있는 좋은 방법
infomation = {'name' : 'boka', 'age': 25}
infomation.setdefault('like' , 'beef')
>>> 'beef'

infomation
>>> {'name': 'boka', 'age': 25, 'like': 'beef'}

infomation.setdefault('like' , 'fish')
>>> 'beef'
  • 이미 infomation은 like라는 키를 가지고있으므로 키에 대한 값은 fish로 바뀌지 않는다.


각 문자가 나타나는 개수를 세는 프로그램

  • msg 변수 안에 있는 각 글자를 차례대로 되풀이 하면서 각 문자가 몇 번이나 나오는지 계산
  • setdefault()는 count 사전에 키가 있음을 보장하므로(없으면 기본값 0을 추가) count[character] = count[character] + 1이 실행될 때 프로그램은 KeyError를 일으키지 않는다.
msg = 'It was a bright cold day in April, and the clocks were striking thirteen. '
count = {}

for character in msg:
    count.setdefault(character, 0)
    count[character] = count[character] + 1

print(count)

>>> {'I': 1, 't': 6, ' ': 14, 'w': 2, 'a': 4, 's': 3, 'b': 1, 'r': 5, 'i': 6, 'g': 2, 'h': 3, 'c': 3, 'o': 2, 'l': 3, 'd': 3, 'y': 1, 'n': 4, 'A': 1, 'p': 1, ',': 1, 'e': 5, 'k': 2, '.': 1}
  • 프로그램에 pprint 모듈을 가져오면 사전의 값들을 보기좋게 출력할 수 있다.
  • 위 코드에 import pprint를 추가한뒤, print(count) -> pprint.pprint(count)로 바꾼뒤 실행
  • 화면에 표시하는 대신 문자열값으로 얻고싶다면 pprint.pformat() 호출
    • pprint.pprint(count) == print(pprint.pformat(count))
{' ': 14,
 ',': 1,
 '.': 1,
 'A': 1,
 'I': 1,
 'a': 4,
 'b': 1,
 'c': 3,
 'd': 3,
 'e': 5,
 'g': 2,
 'h': 3,
 'i': 6,
 'k': 2,
 'l': 3,
 'n': 4,
 'o': 2,
 'p': 1,
 'r': 5,
 's': 3,
 't': 6,
 'w': 2,
 'y': 1}



참고