を使用した後cgi.parse_qs()
、結果(辞書)をクエリ文字列に変換する方法は?に似たものを探してい urllib.urlencode()
ます。
を使用した後cgi.parse_qs()
、結果(辞書)をクエリ文字列に変換する方法は?に似たものを探してい urllib.urlencode()
ます。
回答:
urllib.parse.
urlencode
(クエリ、doseq = False、[...])変換マッピングオブジェクトまたはSTRを含むまたはパーセントエンコードASCIIテキスト文字列に、オブジェクトをバイトできる2要素タプルのシーケンスを、。
A dict
はマッピングです。
urllib.urlencode
(query
[、doseq
])マッピングオブジェクトまたは2要素のタプルのシーケンスを「パーセントエンコードされた」文字列に
変換...文字で区切られた一連のペア...key=value
'&'
dict
にによって返されるのcgi.parse_qs()
はlist
「値」としてsを持っています。これらをそのまま渡すと、クエリ文字列が非常に奇妙に見えます。
あなたはまさに同じようなものを探しています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)
doseq=True
。
多分あなたはこのようなものを探しています:
def dictToQuery(d):
query = ''
for key in d.keys():
query += str(key) + '=' + str(d[key]) + "&"
return query
ディクショナリを受け取り、urlencodeと同様にクエリ文字列に変換します。クエリ文字列に最後の「&」を追加しますがreturn query[:-1]
、問題がある場合は修正します。
str.join()
?いかがurllib.quote_plus()
ですか?
urlencode
でurllib.py
あなたの答えは、特に(Aには有効ではありません「引用」特定の文字への必要性を暗示するように、クエリ文字列を作成することはありません非常に簡単と時々ある理由を確認するために(それはあなたのPythonででインストールする必要がありますが) URL)。@Ignacioは、実装をクリーンアップして正しいものにする2つの関数も参照しています。
from urllib.parse import urlencode; urlencode(your_dict)
)はこれよりも短くて簡単です!既存の適切に設計されたホイールにアクセスするのが高価または不便な場合は、粗雑にでも、ホイールを再発明するのが賢いこともありますが、ここでは既製のホイールを使用する方が、自分の劣ったホイールを転がすよりも簡単で迅速です。 。
cgi.parse_qs()
非推奨です。代わりにurlparse.parse_qs()を使用してください。