在使用 cgi.parse_qs()之后,如何将结果(字典)转换回查询字符串。
cgi.parse_qs()
urllib.parse.urlencode(query, doseq=False, [...])
将 映射对象或可能包含 str 或字节对象的两元素元组序列转换为百分比编码的 ASCII 文本字符串。
ー Python 3 urllib.parse文档
urllib.parse
dict是一种映射。
dict
urllib.urlencode(query[ ,doseq]) 将 映射对象或两个元素的元组序列转换为“百分比编码”字符串... 由 '&'字符分隔的一系列 key=value对..。
urllib.urlencode
query
doseq
'&'
key=value
ー Python 2.7 urllib文档
urllib
也许你在找这样的东西:
def dictToQuery(d): query = '' for key in d.keys(): query += str(key) + '=' + str(d[key]) + "&" return query
它接受一个字典并将其转换为查询字符串,就像 urlencode 一样。它将在查询字符串后面附加一个最后的“ &”,但是如果这是一个问题,return query[:-1]会修复这个问题。
return query[:-1]
你在寻找像 urllib.urlencode()这样的 没错!
urllib.urlencode()
但是,当调用 parse_qs()(不同于 parse_qsl())时,字典键是唯一的查询变量名,每个名称的值是 价值观列表。
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¶m2=bar'
'pram1=foo¶m2=bar'
对于 python2和 python3兼容性,请尝试以下操作:
try: #python2 from urllib import urlencode except ImportError: #python3 from urllib.parse import urlencode