2009-06-21 2 views
29

, 다음 코드파이썬 parse_qs가 단일 값을리스트로 파싱하는 것을 멈추는 방법? 파이썬 2.6

import urlparse 
qsdata = "test=test&test2=test2&test2=test3" 
qs = urlparse.parse_qs(qsdata) 
print qs 

결과는 다음과 같다 테스트에 대해 하나의 값이있을지라도, 그것은 여전히리스트로 해석되는 것을 의미

{'test': ['test'], 'test2': ['test2', 'test3']} 

. 하나의 값만있는 경우 목록으로 파싱되지 않으므로 결과가 다음과 같을 수 있습니다.

{'test': 'test', 'test2': ['test2', 'test3']} 
+10

모든 값이 목록이고 목록 또는 단일 값인 경우 걱정할 필요가 없습니다. 왜 그렇지 않을까요? –

+3

HTTP 표준은 목록이어야 함을 의미합니다. 많은 대안이있는 것 같지 않습니다. –

답변

24

당신은 나중에 그것을 고칠 수 ...

import urlparse 
qsdata = "test=test&test2=test2&test2=test3" 
qs = dict((k, v if len(v)>1 else v[0]) 
      for k, v in urlparse.parse_qs(qsdata).iteritems()) 
print qs 

그러나, 나는 내가이 원하는 것 생각하지 않습니다. 일반적으로 목록에있는 매개 변수가 하나의 항목 집합만으로 도착하면 일반적으로받는 문자열 목록 대신 문자열을 사용하게됩니다.

99

사람이 단순한 사전을 원하는 결코 동일한 키를 가진 여러 개의 값을 필요로하지 않습니다위한 (!) 참고, 시도 :

dict(urlparse.parse_qsl('foo=bar&baz=qux')) 

이 당신에게 좋은 {'foo': 'bar', 'baz': 'qux'}을 줄 것이다. 이 동일한 키에 대해 복수 값인 인 경우 마지막 키만 가져옵니다.

+0

'parse_qsl()'은 당신에게 키 - 값 쌍 (그리고 dict가 아닌)의리스트를 제공하지 않습니까? –

+11

@MisterBhoot 예, 그렇기 때문에 그 주변에'dict (...) '호출이 있습니다. :) – tuomassalo

+0

내 잘못 했어, 미안. 나는 일찍 자야한다. –