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

Sam*_*Sam 95 python urllib urllib2

使用后cgi.parse_qs(),如何将结果(字典)转换回查询字符串?寻找类似的东西 urllib.urlencode().

Ign*_*ams 146

Python 3

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

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

- Python 3 urllib.parse文档

A dict是映射.

传统的Python

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

- Python 2.7 urllib文档

  • Python 3中的[urllib.parse.urlencode](https://docs.python.org/3.3/library/urllib.parse.html#urllib.parse.urlencode). (18认同)
  • 正如文档所说,这就是`doseq`的用途. (7认同)
  • @user1633272:根据谁不推荐? (2认同)

Joh*_*hao 54

在python3中,略有不同:

from urllib.parse import urlencode
urlencode({'pram1': 'foo', 'param2': 'bar'})
Run Code Online (Sandbox Code Playgroud)

输出: 'pram1=foo&param2=bar'

对于python2和python3的兼容性,试试这个:

try:
    #python2
    from urllib import urlencode
except ImportError:
    #python3
    from urllib.parse import urlencode
Run Code Online (Sandbox Code Playgroud)


Joh*_*web 5

您正在寻找完全一样的东西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)
Run Code Online (Sandbox Code Playgroud)

  • 或者您可以通过`doseq = True`。 (13认同)
  • 或者,我可以阅读文档并这样做!是的:-) (5认同)