Python3 변수명이 문자열로 인식되는 문제 / dictionary의 update()사용법
2021. 11. 30.

우선 코드부터

 

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

 

이렇게 하니 내가 원하는 결과대로 나왔다.

 

파이썬은 잘 활용하면 너무 편한 메소드들이 많은데 그만큼 잘못쓰기가 쉬운거 같아서 정말 많은 공부가 필요하게 느껴진다.

myoskin