web-dev-qa-db-ja.com

Pythonで辞書をクエリ文字列に変換する方法は?

cgi.parse_qs()を使用した後、結果(辞書)をクエリ文字列に戻す方法は? urllib.urlencode()に似たものを探しています。

86
Sam

Python 3

urllib.parse.urlencode(query、doseq = False、[...])

マッピングオブジェクトまたはstrまたはbytesオブジェクトを含む可能性のある2要素タプルのシーケンスをパーセントエンコードされたASCIIテキスト文字列。

Python 3 urllib.parse docs

dictはマッピングです。

レガシーPython

urllib.urlencodequery [、doseq])
変換オブジェクトマッピングオブジェクトまたは一連の2要素タプルを「パーセントエンコード」文字列に変換...一連のkey=value'&'文字で区切られたペア...

Python 2.7 urllib docs

137

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
50
Johnny Zhao

何かを探しているexactlyurllib.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)
5
Johnsyweb