2012-11-27 5 views
1

이 주제와 관련된 답변 데이터베이스를 살펴본 결과 본질적으로 나는 사전을 통해 반복하고 있는데, "사전 변경 크기"라는 오류가 발생합니다. 그러나 반복을 시작하기 전에 하나의 키와 값을 뽑아 내고 다른 키와 값을 삽입합니다. I 함께 일하고사전 중 크기가 변경됨

 for patterns in dict_copy.keys(): 
      new_tuple =() 
      for items in range(len(patterns)): 
       if patters[items] not in exclusion: 
        new_tuple += (patterns[items],) 
      dict_copy[new_tuple] = dict_copy.get(patterns) 
      dict_copy.pop(patterns) 

사전의이 형태이다 : {("A", "B", "C", "D") (4) ("B", "A", " C ","D ")"2 ...} 나는 사전 크기를 chaning한다고 생각한다는 사실을 거의 혼란 스럽다.

답변

1

오류는 약간 오도 된 것이다. .

: 당신은 DICT 반복하면서 어떤 구조적인 변화 (삽입/삭제)를 만들 생각하지 않는 것을

이 문제를 해결하는 쉬운 방법은 별도의 사전에 결과를 배치하는 것입니다

new_dict = {} 
    for patterns in dict_copy.keys(): 
     new_tuple =() 
     for items in range(len(patterns)): 
      if patters[items] not in exclusion: 
       new_tuple += (patterns[items],) 
     new_dict[new_tuple] = dict_copy.get(patterns) 
    dict_copy = new_dict 
+0

저는 생각했지만 문제는 있습니다. new_dict를 반복하려면이 루프로 돌아 가야합니다. dict_copy.keys() edit로 설정 되었기 때문에 실용적이지 않습니다.이 루프는 코드의 두 번째 절반이기 때문에 내 프로그램에서 수행해야 할 작업은 dict_copy.keys()의 새로운 버전이 필요하다면 다시 실행하십시오. –

1

반복하기 전에 하나의 키와 값을 튀어 나오고 다른 키를 삽입하고 있습니다.

그건 중요하지 않습니다. 데이터 구조를 반복하는 동안은 변경할 수 없습니다. 파이썬의 반복자는 혼란 스럽습니다. (- : 그것은 사전의 크기가 아니라 내용이 다른 언어입니다. (다른 프로그래밍 언어에서도 마찬가지입니다 ...)

+0

흥미 롭습니다, 됐습니다. –

관련 문제