[python] 사전을 Python에서 쿼리 문자열로 변환하는 방법은 무엇입니까?

을 사용한 후 cgi.parse_qs()결과 (사전)를 쿼리 문자열로 다시 변환하는 방법은 무엇입니까? 와 비슷한 것을 찾고 urllib.urlencode()있습니다.



답변

파이썬 3

urllib.parse.urlencode(쿼리, doseq = False, […])

변환 매핑 객체 또는 캐릭터 라인을 포함 또는 퍼센트로 인코딩 된 ASCII 텍스트 문자열, 객체를 바이트 수있는 두 가지 요소 튜플의 순서를.

Python 3 urllib.parse문서

A dict는 매핑입니다.

레거시 Python

urllib.urlencode( query[, doseq])
변환 매핑 객체 또는 “퍼센트 인코딩”문자열 개의 원소 튜플 시퀀스 … 일련의 key=value쌍으로 구분 '&'문자 …

Python 2.7 urllib문서


답변

python3에서는 약간 다릅니다.

from urllib.parse import urlencode
urlencode({'pram1': 'foo', 'param2': 'bar'})

산출: 'pram1=foo&param2=bar'

python2 및 python3 호환성을 위해 다음을 시도하십시오.

try:
    #python2
    from urllib import urlencode
except ImportError:
    #python3
    from urllib.parse import urlencode


답변

당신은 정확히 같은 것을 찾고 있습니다 urllib.urlencode()!

그러나 호출 할 때 parse_qs()(에서 구별됨 parse_qsl()) 사전 키는 고유 한 쿼리 변수 이름이고 은 각 이름에 대한 값 목록입니다 .

이 정보를에 전달 urllib.urlencode()하려면 이러한 목록을 “평탄화”해야합니다. 다음은 튜플의 목록을 이해하는 방법입니다.

query_pairs = [(k,v) for k,vlist in d.iteritems() for v in vlist]
urllib.urlencode(query_pairs)


답변

아마도 다음과 같은 것을 찾고있을 것입니다.

def dictToQuery(d):
  query = ''
  for key in d.keys():
    query += str(key) + '=' + str(d[key]) + "&"
  return query

사전을 가져 와서 urlencode처럼 쿼리 문자열로 변환합니다. 쿼리 문자열에 마지막 “&”를 추가하지만 return query[:-1]문제가있는 경우 수정합니다.


답변