우선 코드부터
genre의 값으로 들어간 문자열을 key값으로 사용하고 싶은건데 genre의 내용물이 아니라 'genre'라는 문자열로 인식해버리는 문제가 있었다.
그래서 print result해보면 {'genre':1} 이런식으로 나와버렸다.
genre변수가 들어간 부분을 하나씩 살펴보는 수 밖에 없는데
우선 result.get(genre)는 문제가 없다. 정상 동작함.
문제가 생기는 부분이 update인것 같았다.
저부분을 지나고나면 result에 {'genre':1}가 들어가는 것이 확인됨.
result.get(genre)는 정상 동작하기에 genre에 들어 있는 문자열은 'genre'가 아니니 None이 되어버리고 반복문을 도는 내내 result.update(genre=1)만 실행이 되는 문제가 발생했다.
그렇다면 dictionary에서 update 메소드는 어떻게 활용되는가?
우선 help에서는 이렇게 설명하고 있는데 더 자세하게 설명해주는 글을 찾았다.
https://stackoverflow.com/questions/173290/python-dictionary-update-method
python dictionary update method
I have a list string tag. I am trying to initialize a dictionary with the key as the tag string and values as the array index. for i, ithTag in enumerate(tag): tagDict.update(ithTag=i) The a...
stackoverflow.com
답변을 살펴보면
update() 메소드는 단일 키/값 쌍을 변경하는 것이 아니라
다른 dictionary를 이용해 dictionary의 값을 업데이트하는 데 사용된다고 한다.
단순 키와 값 변경에 적합하지 않고
여러 값을 동시에 변경해야할때 더 적합한 메소드이다.
다시한번 내가 쓴 코드를 살펴보자면
나는 result에다가 {'genre':1}이라는 새로운 dictionary를 만들어서 그 값을 업데이트하고 있는 꼴이 된 것이다.
update를 사용하지 않고 수정한 코드는 이렇다.
for genre in genre_list:
if result.get(genre) != None :
continue
result[genre] = 1
이렇게 하니 내가 원하는 결과대로 나왔다.
파이썬은 잘 활용하면 너무 편한 메소드들이 많은데 그만큼 잘못쓰기가 쉬운거 같아서 정말 많은 공부가 필요하게 느껴진다.
'언어 > Python' 카테고리의 다른 글
[파이썬/Python] 파이썬 독학하기 6일차 - 예외처리, 파일 입출력, 클래스와 객체 (0) | 2020.08.22 |
---|---|
[파이썬/Python] 파이썬 독학하기 5일차 - 키워드 인수, 가변인수, 람다함수, 모듈 (0) | 2020.08.21 |
[파이썬/Python] 파이썬 독학하기 4일차 - 사용자 정의함수, 전역지역변수, 매개변수 (0) | 2020.08.19 |
[파이썬/Python] 파이썬 독학하기 3일차 - 리스트, 튜플, 집합, 사전, for문 (0) | 2020.08.14 |
[파이썬/Python] 파이썬 독학하기 2일차 - 입출력문, 조건문, 반복문 (0) | 2020.08.14 |