python Dictionary 추가, 삭제, 수정 관련 질문드립니다.
조회수 1366회
python dictionary에 새로운 value를 추가할 때 'dictionary changed size during iteration' 에러가 발생됩니다.
Table 내의 데이터를 select 해서 search_dict(Type:dictionary)에 값을 넣었습니다. Value Type은 리스트입니다. 키는 고유의 키로 넣었습니다.
self.search_dict = {} (초기화)
key : 12가1010S // Value : [12가1010', '20191211105820', 'S']
key : 13가2020S // Value : ['13가2020', '20191211105820', 'S']
key : 44가2030S // Value : ['44가2030', '20191211105820', 'S']
위와 같이 search_dict에 데이터가 있고 로직 순서대로 진행 후 새로운 데이터가 발생되면
list = "['55가1234','20191211105822','S']" (새로운 데이터 삽입)
self.search_dict['55가1234S'] = list
위와 같이 search_dict에 새로운 데이터를 추가하려고 합니다. 이 때, 'dictionary changed size during iteration' 에러가 발생되는데
분명히 테스트로 순서대로 데이터를 삽입하면 정상적으로 추가가 되었는데, 왜 안되는지 이해가 되질 않습니다..
python 테스트로 위와 같이 key, value 실행 한 결과는 아래와 같습니다.
추가적으로 에러가 발생되는 코드 부분입니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
질문에서 말씀하신 에러를 발생하는 코드가 아니라서, 문제의 소지로 보이는 부분만 말씀드리겠습니다.
>>> d = {} >>> l = [1,2,3] >>> d[1] = l >>> d {1: [1, 2, 3]} >>> l[1] = 10 >>> d {1: [1, 10, 3]} >>> d[1] = l.copy() >>> d {1: [1, 10, 3]} >>>
딕셔너리의 밸류값으로 리스트 l을 지정하고, 이후에 l의 내용을 바꾸면, 딕셔너리 안의 내용도 같이 바뀝니다. 이런 이유 때문에, 딕셔너리에 데이터를 넣은 이후에 리스트가 바뀌면서 데이터가 안 들어간 것처럼 결과가 나오는 것 아닐까 추측합니다.
이런 걸 방지하기위해서 위 예에서는 딕셔너리에 밸류를 지정할 때, 리스트를 copy 하여 지정하였습니다.
- 아... 정말 이렇게 간단한 문제로 인해 몇일을 고생한 제 자신이 한탄스럽네요. 리스트에 copy()만 추가해서 딕셔너리에 추가하니 원하는 로직대로 진행됩니다. 정말 감사합니다 ! 알 수 없는 사용자 2019.12.11 12:54
- 디버그모드로 돌려보면서 변수값들을 확인하는 방법도 배우세요. vscode, pycharm 모두 가능합니다. nowp 2019.12.11 13:31
- pandas dataframe 을 사용하는 방법이 더 간결할 수도 있어보입니다. nowp 2019.12.11 13:33
댓글 입력