如何在 Python 中将字典转换为查询字符串?

在使用 cgi.parse_qs()之后,如何将结果(字典)转换回查询字符串。

103580 次浏览

巨蟒3

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

映射对象或可能包含 str 或字节对象的两元素元组序列转换为百分比编码的 ASCII 文本字符串。

Python 3 urllib.parse文档

dict是一种映射。

传奇巨蟒

urllib.urlencode(query[ ,doseq])
映射对象或两个元素的元组序列转换为“百分比编码”字符串... 由 '&'字符分隔的一系列 key=value对..。

Python 2.7 urllib文档

也许你在找这样的东西:

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

它接受一个字典并将其转换为查询字符串,就像 urlencode 一样。它将在查询字符串后面附加一个最后的“ &”,但是如果这是一个问题,return query[:-1]会修复这个问题。

你在寻找像 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)

在 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