본문 바로가기
python/메모장

[Python] 딕셔너리 포함여부 및 계산

by GJ999 2023. 1. 8.
[목표]
인기투표를 한다고 했을 때, 내가 뽑고 싶은 캐릭터가 해당 딕셔너리에 있을 때는 1표가 추가 되고, 없다면 해당 딕셔너리에 추가되는 형식을 만들고 싶다고 가정하자.

기존 딕셔너리에는 아래와 같은 데이터가 세팅되어 있고, 추가하고자 하는 값은 key라는 변수라고 하자.

>>> character_pop = {
...     '해리포터' : 465,
...     '캡틴마블' : 120,
...     '아이언맨' : 700,
... }
>>> key = '루피'

내가 투표하고자 하는 '루피'가 딕셔너리 안에 있는지 없는지를 판별하고, 없다면 1표를 추가해야 한다.

  • 1. if문 이용 < if key in dictionary : >

if문을 통해 딕셔너리에 있는지를 판별한 다음에, 없다면 딕셔너리에 해당 키 값이 1임을 추가하도록 한다.

>>> def vote(character_pop, key):
...     if key in character_pop:
...         character_pop[key] +=1
...     else:
...         character_pop[key] = 1
...
>>> vote(character_pop, key)
>>> character_pop
{'해리포터': 465, '캡틴마블': 120, '아이언맨': 700, '루피': 1}

기존 딕셔너리 안에 있던 '해리포터'를 했더니 정상적으로 투표값이 1개 증가한 것을 볼 수 있다.

>>> vote(character_pop, '해리포터')
>>> character_pop
{'해리포터': 466, '캡틴마블': 120, '아이언맨': 700, '루피': 1}
  • 2. try문 이용 < try ~ except ~>
>>> character_pop = {
...     '해리포터' : 465,
...     '캡틴마블' : 120,
...     '아이언맨' : 700,
... }
>>>
>>> key = '루피'
>>> def vote2(character_pop, key):
...     try:
...         character_pop[key] += 1
...     except:
...         character_pop[key] = 1
...     print(character_pop)
...
>>> vote2(character_pop, key)
{'해리포터': 465, '캡틴마블': 120, '아이언맨': 700, '루피': 1}
>>> vote2(character_pop, '해리포터')
{'해리포터': 466, '캡틴마블': 120, '아이언맨': 700, '루피': 1}
  • 3. 딕셔너리 get 이용 < dict.get(key, default value) >

get의 두 번째 인자첫번째 인자인 키가 딕셔너리에 들어 있지 않을 때 돌려줄 디폴트 값이다.

내가 투표하고자 하는 캐릭터가 없다면 get을 통해 0을 반환하고 이에 1을 더하는 로직을 생성했다.

이 방법이 제일 코드가 짧다.

>>> character_pop = {
...     '해리포터' : 465,
...     '캡틴마블' : 120,
...     '아이언맨' : 700,
... }
>>>
>>> key = '루피'

>>> character_pop[key] = character_pop.get(key, 0) + 1
>>> character_pop
{'해리포터': 465, '캡틴마블': 120, '아이언맨': 700, '루피': 1}

>>> key = '해리포터'
>>> character_pop[key] = character_pop.get(key, 0) + 1
>>> character_pop
{'해리포터': 466, '캡틴마블': 120, '아이언맨': 700, '루피': 1}

 

반응형

댓글