Coding Diary.

(파이썬) for 반복문과 get 메소드로 딕셔너리(dictionary) 만들기, items로 키와 값 쌍 얻기 본문

Coding/Python

(파이썬) for 반복문과 get 메소드로 딕셔너리(dictionary) 만들기, items로 키와 값 쌍 얻기

life-of-nomad 2024. 6. 8. 11:58
728x90
반응형
지난 글에서 for 반복문에 대한 개념과 간단한 문제에 대해 알아보았습니다. 이번 글에서는 for 반복문과 get 메소드 이용해서 딕셔너리를 만드는 방법에 대해 알아보겠습니다.

 

🔻(참고) for 반복문🔻

 

(파이썬) for 반복문, range 함수, for 반복문 이용해서 리스트 변경하기

파이썬에는 for 반복문과 while 반복문이 있습니다. 먼저, 이번글에서는 iterable(반복가능한) 것을 순회하는데 사용할 수 있는 for 반복문에 대해 알아보겠습니다. iterable : 요소들을 한 번에 하나씩

life-of-nomad.tistory.com

🔻(참고) 딕셔너리 get 메소드🔻

 

(파이썬) 딕셔너리(dictionary)와 동일성 연산자 is, is not, get 메소드 복합 데이터 구조 알아보기

지난 글에서 파이썬 데이터 구조 유형 중 하나인 세트(set)에 대해 알아보았습니다. 세트는 단순한 데이터 구조이며 고유 요소를 수집하는 한 가지 주요 용도가 있습니다. 이에 반해 또 다른 데이

life-of-nomad.tistory.com

 

1. 딕셔너리 만들기

  • 문자열에 있는 각 단어의 총 개수를 추적하는 word_counter 라는 딕셔너리를 두 가지 방법으로 만들어보겠습니다.

방법1) for 반복문을 사용

  • 먼저, 단어가 담긴 리스트부터 시작해보겠습니다.
book_title =  ['great', 'expectations','the', 'adventures', 'of', 'sherlock','holmes','the','great','gasby','hamlet','adventures','of','huckleberry','fin']
  • 그 다음, 빈 딕셔너리를 만듭니다. 
word_counter = {}
  • 리스트의 각 요소를 반복합니다. 요소가 이미 딕셔너리에 포함되어 있다면 그 값에 1을 더하고, 아니면 요소를 딕셔너리에 추가하고 값을 1에 설정합니다.
for word in book_title:
    if word not in word_counter:
        word_counter[word] = 1
    else: word_counter[word] += 1
  • for 반복문은 리스트의 모든 요소를 반환합니다. 첫 번째 반복시 word 는 great라는 값을 취합니다.
  • 다음으로 if 문은 word_counter 딕셔너리에 있는지 검사합니다. 아직 없기 때문에 구문 word_counter[word] = 1 은 great를 키로 하고 값을 1로 하는 딕셔너리에 추가됩니다.
  • 다음으로 for 반복문으로 반복해서 진행합니다. 
  • if 조건이 충족되지 않으면 그 이유는 word가 이미 word_counter 딕셔너리에 있기 때문이고, 구문 word_counter[word] = word_counter[word] + 1 은 그 워드의 개수를 1만큼 증가시킵니다.
  • for 반복문이 리스트를 완전히 반복하면 for 반복문이 종료됩니다.
  • 위 코드를 출력하면 다음과 같습니다.
{'great': 2, 'expectations': 1, 'the': 2, 'adventures': 2, 'of': 2, 'sherlock': 1, 'holmes': 1, 'gasby': 1, 'hamlet': 1, 'huckleberry': 1, 'fin': 1}

 

방법2) get 메소드 사용하기

  • 위와 동일한 리스트를 사용하겠습니다.
book_title =  ['great', 'expectations','the', 'adventures', 'of', 'sherlock','holmes','the','great','gasby','hamlet','adventures','of','huckleberry','fin']
  • 빈 딕셔너리를 만듭니다.
word_counter = {}
  • 딕셔너리 get 메소드로도 딕셔너리에 있는 키의 값을 받을 수 있습니다.
  • 단, 인덱싱과는 달리, 이 메소드를 쓰면 키가 없을 때 기본값이 리턴됩니다.
  • 지정되지 않은 경우 이 기본값은 None 입니다. 여기서는 기본값 0을 사용하겠습니다.
  • 아래의 코드처럼 각 요소를 반복하고 딕셔너리에 있는 값을 get()한 다음 1을 더합니다. 
# 'word_counter.get(word, 0)'는 'word'가 딕셔너리에 있으면 해당 값을, 없으면 0을 반환합니다.
# 반환된 값에 1을 더해 'word'의 새로운 빈도로 설정합니다.
for word in book_title:
    word_counter[word] = word_counter.get(word, 0) + 1
  • for 반복문은 바디에서 그 다음 구문에 great를 줍니다.
  • 그 밑에 줄에서 키 'great'는 아직 딕셔너리에 없기 때문에 get(word,0)은 값 0을 리턴하고 거기에 1을 더한 word_counter[word]는 1로 설정될 것입니다.
  • 만약, word_counter에 이미 존재하는 단어를 만나면 word_counter.get(word, 0)의 그 키에 해당하는 값을 반환하고, 반환된 값에 1을 더합니다.
  • the가 두 번째 나온 경우 키의 값은 다시 1이 추가되어 2가 됩니다. 
  • for 반복문이 리스트를 완전히 반복하면 for 반복문이 종료됩니다.
  • 코드를 출력하면 방법1과 같은 결과가 나옵니다.
{'great': 2, 'expectations': 1, 'the': 2, 'adventures': 2, 'of': 2, 'sherlock': 1, 'holmes': 1, 'gasby': 1, 'hamlet': 1, 'huckleberry': 1, 'fin': 1}

 

2. for 반복문으로 딕셔너리 반복하기

  • for 반복문을 사용하여 딕셔너리를 반복할 경우, 딕셔너리의 키(key)에만 액세스할 수 있게 됩니다. 
  • 하지만 딕셔너리에 있는 키와 값을 모두 반복하는 방법도 있습니다. 
  • 아래의 예시에서 배우 이름을 키(key)로 하고 캐릭터를 값(value)로 사용하는 딕셔너리가 있다고 가정해보겠습니다.
cast = {
"Jerry Seinfeld": "Jerry Seinfeld",
"Julia Louis-Dreyfus": "Elaine Benes",
"Jason Alexander": "George Costanza",
"Michael Richards": "Cosmo Kramer"
}
  • for 반복문을 사용하여 반복하면 키만 출력됩니다.
for key in cast:
    print(key)
    
>>> Jerry Seinfeld
    Julia Louis-Dreyfus
    Jason Alexander
    Michael Richards
  • 키와 값을 모두 반복하고 싶으면 다음과 같이 내장 메소드인 items를 사용할 수 있습니다.
for key, value in cast.items():
    print("Actor: {}    Role: {}".format(key, value))
    
>>> Actor: Jerry Seinfeld    Role: Jerry Seinfeld
    Actor: Julia Louis-Dreyfus    Role: Elaine Benes
    Actor: Jason Alexander    Role: George Costanza
    Actor: Michael Richards    Role: Cosmo Kramer
  • 이와 같이 items는 키, 값 쌍들로 된 튜플을 리턴하는 유용한 메소드입니다. 
  • 또 다른 예시로, basket_itmes 에 fruits 가 몇개 있는지 확인하는 반복문을 만들어보겠습니다.
result = 0
basket_items = {'pears': 5, 'grapes': 19, 'kites': 3, 'sandwiches': 8, 'bananas': 4}
fruits = ['apples', 'oranges', 'pears', 'peaches', 'grapes', 'bananas']

for object, count in basket_items.items():
    if object in fruits:
        result += count
        
print("They are {} fruits in the basket.".format(result))

>>> They are 28 fruits in the basket.
  • 과일이 아닌것들도 count 해보겠습니다.
fruit_count, not_fruit_count = 0, 0
basket_items = {'apples': 4, 'oranges': 19, 'kites': 3, 'sandwiches': 8}
fruits = ['apples', 'oranges', 'pears', 'peaches', 'grapes', 'bananas']

for object, count in basket_items.items():
    if object in fruits:
        fruit_count += count
    else:
        not_fruit_count += count 

print("The number of fruits is {}. There are {} objects that are not fruits.".format(fruit_count, not_fruit_count))
728x90
반응형