使用后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()
实际上将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
(它应该在你的Python安装),看看为什么创建一个查询字符串是有时不是很简单,因为你的答案意味着(尤其是需要“报价”某些字符不在有效网址)。@Ignacio还引用了两个函数,这些函数可以清理实现并使其正确。
from urllib.parse import urlencode; urlencode(your_dict)
)比这更短,更容易!我会承认,有时在造价昂贵或不方便使用现有的,设计精良的车轮时,重塑车轮有时甚至是明智的做法,但是在这里,使用现成的车轮比滚动自己的劣质车轮更容易,更快。 。
cgi.parse_qs()
已弃用。请改用urlparse.parse_qs()。