2010-08-13 4 views
1

파이썬이 특별한 방식으로 행동하는 이유에 대해 정말로 혼란 스럽습니다.python 혼란 : dict.pop

다음은 예입니다. "copy"라는 사전이 있습니다. (그것은 장고에 HttpRequest.POST의 복사본입니다.) 여기

이 (추가 회선 번호) 디버그 세션 : 사전에이 값은 같다고

1 (Pdb) copy 
2 <QueryDict: {u'text': [u'test'], u'otherId': [u'60002'], u'cmd': [u'cA'], u'id': 
3 [u'15']}> 
4 (Pdb) copy['text'] 
5 u'test' 
6 (Pdb) copy.pop('text') 
7 [u'test'] 

내 문제가 모든 목록 (그들은 장고에서 온 방식입니다.) 4 행에서와 같이 요소에 액세스 할 때 목록이 아닌 값으로 가져옵니다. 그러나 팝업으로 액세스 할 때 목록으로 다시 가져옵니다.

나는 정말 혼란 스럽다. 누구든지 도와 줄 수 있습니까?

+1

질문의 제목을 편집해야합니다 : 이것은 Python dicts에서는 전혀 문제가되지 않지만 특히 Django QueryDicts에서는 문제의 제목을 편집해야합니다. –

답변

5

QueryDict에 대해 docs을 살펴보십시오. 즉, copy['text']'text'과 연결된 값 목록에서 마지막 값을 반환하므로 항목을받는 방식을 수정하는 dict의 하위 클래스라는 간단한 대답입니다. pop을 재정의하지 않았으므로 전체 목록을 반환합니다.

하여 특정 값과 연관된 목록을 가져올 수 .getlist를 사용할 수 있습니다

copy['text'] 
>>> u'test' 

copy.getlist('text') 
>>> [u'test'] 

그 이유는 일부 HTML 요소가 하나의 키에 대해 여러 값을 반환 할 것입니다.