2014-12-09 3 views
0

이 프로그램은 사전을 취하여 원래 사전의 거울 이미지가있는 새 사전을 반환해야합니다 (키 : 값 쌍이 전환됨을 의미 함).이 프로그램에서 RuntimeError를 어떻게 수정합니까?

그러나 pythontutor.com에 따르면 for 루프를 나타내는 코드 행에 대해서는 RuntimeError이 발생합니다.

파이썬의 최신 버전 (3.4.1)

을 사용하고
#Program purpose:    Write a function called rvBirthday that takes 
#        dictionary birthday as input. It returns a 
#        mirror image of the dictionary, where birthday 
#        is the key and name is the value. 


def rvBirthday(birthday): 
    reverseBD = {} 
    for key in birthday.keys(): 
     date = birthday.get(key) 
     birthday.pop(key) 
     reverseBD[date] = key 
    return reverseBD 

birthday = {'Mitsuyuki Washida':'3-29-93', 'Joe Bob':'7-12-96', 
     'Sam Wilson':'4-1-02'} 
print(rvBirthday(birthday)) 

내가 오류는 다음과 같습니다하여 전체를 반복하는 동안 입력 사전 을 변경하는

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 3, in rvBirthday 
RuntimeError: dictionary changed size during iteration 
+0

그 기능에서 많은 추가 작업이 필요하지 않습니다. 사전을 반복 할 때'.keys()'를 호출하지 마십시오; 당신은 사전 자체를 반복 할 수 있습니다. 사전에 모든 키가 있다는 것을 이미 알고 있으므로'.get()'을 사용하는 이유는 무엇입니까? 원래 사전에서 키를 삭제해야하는 이유는 무엇입니까? 게다가'.pop()'도 그 값을 반환하므로'.get()'호출이 필요 없다. –

+2

@Andy : OP에서 사용한대로 Python 3.4에 붙여 넣은 것이 아닙니다. 파이썬 2에서는'.keys()'가 별도의 새로운리스트를 만들기 때문에 작동하지만 파이썬 3에서는'.keys()'가 사전보기를 반환합니다. 파이썬 2에서 이슈를 복제하려면'.keys()'를'.viewkeys()'로 대체하십시오. –

답변

관련 문제