使用后cgi.parse_qs(),如何将结果(字典)转换回查询字符串?寻找类似的东西 urllib.urlencode()。
使用后cgi.parse_qs(),如何将结果(字典)转换回查询字符串?寻找类似的东西 urllib.urlencode()。
Answers:
urllib.parse.urlencode(查询,doseq = False,[...])将映射对象或可能包含str或bytes对象的两个元素的元组序列转换为百分比编码的ASCII文本字符串。
A dict是一个映射。
urllib.urlencode(query[,doseq])
将映射对象或由两个元素组成的元组序列转换为 “百分比编码”字符串...一系列key=value由'&'字符分隔的对...
dict返回的by cgi.parse_qs()实际上将lists作为其“值”。直接传递这些将导致看起来很奇怪的查询字符串。
您正在寻找完全一样的东西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(它应该在你的Python安装),看看为什么创建一个查询字符串是有时不是很简单,因为你的答案意味着(尤其是需要“报价”某些字符不在有效网址)。@Ignacio还引用了两个函数,这些函数可以清理实现并使其正确。
from urllib.parse import urlencode; urlencode(your_dict))比这更短,更容易!我会承认,有时在造价昂贵或不方便使用现有的,设计精良的车轮时,重塑车轮有时甚至是明智的做法,但是在这里,使用现成的车轮比滚动自己的劣质车轮更容易,更快。 。
cgi.parse_qs()已弃用。请改用urlparse.parse_qs()。